如何根据条件从函数返回值

斯科特·尼姆罗德(Scott Nimrod)

我不确定为什么以下函数无法编译:

let isWithinRange (searchElement:int, recordLength:int) =
    if searchElement = recordLength then true
    elif searchElement > recordLength then false

结果,我必须修改此函数才能使其编译:

let isWithinRange (searchElement:int, recordLength:int) =
    let mutable withinRange = false
    if searchElement = recordLength then withinRange <- true
    elif searchElement > recordLength then withinRange <- false
    withinRange

我不想在我的代码中引入可变性。

问题:

  1. 为什么我的原始函数无法编译?
  2. 在不引入可变性的情况下,我需要怎么做才能使此函数编译?
  3. 编写此函数的更好方法是什么?

笔记:

我是F#的新手。因此,请原谅我这个无知的问题。

您只是错过了决赛else (value)if语句的结构if...elif,但您需要为if...elif...else,否则函数中至少有一个不返回值的代码路径。添加else false到原始功能的末尾,您的代码将被编译。

此外,函数名称实际上没有任何意义。为什么将搜索元素与记录长度进行比较?为什么称这种比较isWithinRange呢?就目前而言,您的函数(至少是编译的第二个版本)当前遵循以下逻辑:

  1. 如果searchElement等于recordLength,则返回true
  2. 在其他所有情况下,请返回false

可以这样写:

let isWithinRange (searchElement:int, recordLength:int) =
    (searchElement = recordLength)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章