【发布时间】:2021-01-19 06:05:02
【问题描述】:
给函数参数命名是记录我们代码的一种方式;如果没有这样的需要,那么我们可以给它们命名,例如“arg1”和“arg2”,这样也不会更糟——但实际上这当然会使我们的代码更难理解。在 F# 中,我们经常将函数作为参数传递给其他函数,在这种情况下,它们的参数不再命名:
let foo<'T> (bar : 'T -> 'T -> float -> 'T) =
// do something
这个函数 foo 接受一个“bar”作为参数,它本身接受两个 'T 和一个浮点数并返回一个 'T,但很难说它应该做什么。如果我们可以将“bar”的参数命名为:
let foo<'T> (bar : (startVal : 'T) -> (endVal : 'T) -> (interpolationAmt : float) -> 'T) =
// do something
现在“bar”的用途很明显了:它在两个 'T 类型的值之间进行插值。此外,'T 参数的顺序以及应用它们的顺序也很重要。但不幸的是,这段代码无法编译。
所以我的问题是,是否有一种我错过的方法可以做到这一点,如果没有,人们通常如何处理这个问题?
【问题讨论】:
标签: f# naming code-documentation