我不确定为什么以下函数无法编译:
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
我不想在我的代码中引入可变性。
问题:
注:
我是F#的新手。所以请原谅我这个无知的问题。
答案 0 :(得分:6)
你只是错过了最后的else (value)
。 if
语句的结构为if...elif
,但您需要if...elif...else
,否则您的函数中至少会有一个不返回值的代码路径。将else false
添加到原始函数的末尾,代码将编译。
此外,功能名称并没有多大意义。为什么要将搜索元素与记录长度进行比较?为什么这种比较称为isWithinRange
?目前,您的函数(至少是第二个版本,编译)目前遵循以下逻辑:
searchElement
等于recordLength
,请返回true
。false
。这可以简单地写成:
let isWithinRange (searchElement:int, recordLength:int) =
(searchElement = recordLength)