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

标签 programming-languages haskell reference

出于兴趣,我想了解这样设计的语言。 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/

相关文章:

memory - 具有手动内存管理功能的解释型语言?

python - 相同的抽象语法树是否保证相同的行为?

c - 我们如何在C语言中将list(Python中的)函数实现为数组?

haskell - 获取列表中元组的元素

haskell - 用于(似乎是)实现函数反转的逆变仿函数的类型类

c++ - 指针或引用

c - Malloc 改变单独函数中未初始化变量的行为?

haskell - 为什么这违反了 "Coverage Condition"

javascript - 了解 React 幕后

c++ - 存储右值引用 : should this work?