出于兴趣,我想了解这样设计的语言。 Haskell 是其中之一,对吧?
我说的是可以做到这一点的语言,但也有编译器支持来捕捉问题,比如它是否可以为空,那么你必须有适当的案例,处理编译等。
它也只是函数式编程中的一个概念吗?它是否也存在于某些 OO 语言中?
最佳答案
只是为了回答您问题的第一部分,您是对的,Haskell 没有可以是任何类型的特殊“空”值。
如果你想要这种行为,你必须改变你的函数的返回类型。通常,您为此使用 Maybe 类型,例如:
safeDiv :: Float -> Float -> Maybe Float
safeDiv a b
| b == 0 = Nothing
| otherwise = Just (a / b)
这表示 safeDiv 接受两个浮点数并返回一个类型
Maybe Float
.在函数体中,我可以返回 Nothing
如果 b 为零,否则返回 Just (a / b)
.关键是您的类型签名明确标记了您的函数是否可以返回
Nothing
与否,任何调用者都将被迫以某种方式处理这两种可能的情况。然而,Haskell 确实有可以抛出和捕获的异常。对于纯函数,最好返回一个 Maybe 值而不是仅仅抛出一个错误,但即使是一些 Prelude(基础库)函数也是不安全的。例如,
head
,它返回列表的第一个元素,如果列表为空,则抛出错误,而不是返回包含在 Maybe 中的值。
关于programming-languages - 默认情况下,哪些语言的引用不可为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5225329/