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

时间:2015-11-20 13:03:53

标签: f#

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

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. 写这个函数有什么更好的方法?
  4. 注:

    我是F#的新手。所以请原谅我这个无知的问题。

1 个答案:

答案 0 :(得分:6)

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

此外,功能名称并没有多大意义。为什么要将搜索元素与记录长度进行比较?为什么这种比较称为isWithinRange?目前,您的函数(至少是第二个版本,编译)目前遵循以下逻辑:

  1. 如果searchElement等于recordLength,请返回true
  2. 在所有其他情况下,请返回false
  3. 这可以简单地写成:

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