默认情况下,哪些语言的引用是不可为空的?

Joa*_*nge 6 haskell programming-languages reference

出于兴趣,我想阅读有关这样设计的语言.哈斯克尔是一个,对吧?

我说的是执行此操作的语言,但也有编译器支持来捕获问题,如果它可以为空,那么你必须有适当的案例,处理编译等.

它也只是函数式编程中的一个概念吗?它是否也存在于某些OO语言中?

chr*_*sdb 2

只是为了回答你问题的第一部分,你是对的,Haskell 没有可以是任何类型的特殊“空”值。

如果您想要这种行为,则必须更改函数的返回类型。通常,您为此使用 Maybe 类型,例如:

safeDiv :: Float -> Float -> Maybe Float

safeDiv a b
    | b == 0    = Nothing
    | otherwise = Just (a / b)
Run Code Online (Sandbox Code Playgroud)

这表示 safeDiv 接受两个 Float 并返回一个 type Maybe Float。在函数体内,Nothing如果 b 为零,我可以返回,否则我返回Just (a / b)

关键是你的类型签名明确地标记了你的函数是否可以返回Nothing,并且任何调用者都将被迫以某种方式处理这两种可能的情况。

然而,Haskell 确实有可以抛出和捕获的异常。对于纯函数,最好返回 Maybe 值,而不是仅仅抛出错误,但即使某些 Prelude(基础库)函数也是不安全的。例如,head返回列表的第一个元素,如果列表为空,则会抛出错误,而不是返回包含在 Maybe 中的值。

  • 嗯,有一个简单的方法来思考这个问题。我认为从实现的角度来看,这有点错误,但如果我说:_所有函数只接受一个参数并返回一个值_并且_函数可以返回其他函数_,这对初学者很有帮助。因此 `Float -> Float -> Maybe Float` 是 `Float -> (Float -> Maybe Float)`,即 safeDiv 接受一个 Float,并返回另一个接受 Float 并返回 Maybe Float 的函数。 (2认同)