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

Sco*_*rod 0 f#

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

let isWithinRange (searchElement:int, recordLength:int) =
    if searchElement = recordLength then true
    elif searchElement > recordLength then false
Run Code Online (Sandbox Code Playgroud)

因此,我必须修改此函数只是为了编译它:

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

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

题:

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

注意:

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

rmu*_*unn 6

你刚刚错过决赛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)
Run Code Online (Sandbox Code Playgroud)