假设我有一个函数,它在满足给定条件时返回某个值,而在不满足条件时不返回任何值。
例如
fun foo(n)= if n< 100000 then n else (类似于退出函数。我们在其他编程语言中有它。我们这里有类似的东西吗?)
我最初想写 () 但它在 if 或某事的两个条件下表示不匹配。
变得更加明确,我想编写一个函数,它接受一个数字,任何数字,如果它是有效的整数则组合到一个列表中,如果它不是整数则忽略它。
在 SML 中,函数总是必须返回一个值¹。表示可能有也可能没有有用结果的函数的一种方法是使用OPTION
类型。如果它有一些有用的东西要返回,或者没有,使用OPTION
你的函数会返回。SOME value
NONE
对于您的特定用例,另一种选择是将列表作为第二个参数,然后返回附加到列表的结果或未更改的列表。
¹ 事实上,我不知道有任何语言允许非 void 函数不返回值(不调用未定义的行为)。在某些语言中,您可以返回null
代替正确的返回值,但在大多数语言中,对于具有返回类型的函数是不允许的int
。无论哪种方式,SML 都没有空值。
fun foo n = if n < 1000000 then SOME n else NONE
请注意,您不能直接将 foo n 用作整数,但您必须使用 isSome 和 valOf 或模式匹配才能知道您是哪种情况。
将您的列表作为参数传递并将值附加到它可能会更好。
fun foo (n: int, xs: int list) =
if n < 1000000 then n :: xs else xs