可能是一种普通的数据类型,定义如下:
data Maybe a = Just a | Nothing
因此有两种可能性:或者将类型为
a
的值定义为仅为a
(比如仅为3
),或者如果查询没有答案,则定义为无
。
它被定义为定义非总体函数输出的一种方式。
例如:假设您要定义
sqrt
。平方根仅为正整数定义,因此您可以将sqrt
定义为:
sqrt x | x >= 0 = Just $ ...
| otherwise = Nothing
使用
...
一种计算x
平方根的方法。
有些人将
Nothing
与大多数编程语言中的“空指针”进行比较。默认情况下,通过添加Nothing
,您没有为您定义的数据类型实现空指针(如果实现了,所有这些“空”看起来都不同),您有一个通用的空指针。
因此,可以使用
Maybe
来表示可能无法计算输出。当然,在小于0
的值上也可能出现错误:
sqrt x | x >= 0 = Just $ ...
| otherwise = error "The value must be larger or equal to 0"
但是错误通常不会在类型签名中提及,如果不考虑它们,编译器也不会有任何问题。Haskell也在转向total函数:最好总是尝试至少为所有可能的输入返回一个值(例如
Nothing
)。
如果您以后想使用
的结果,也许是
,例如您需要编写:
succMaybe :: Maybe Int -> Maybe Int
succMaybe (Just x) = Just (x+1)
succMaybe _ = Nothing
但是,通过为第一种情况编写
,
,你不知何故警告自己,可能什么都不会发生。您还可以通过引入一个“默认”值来摆脱
Maybe
:
justOrDefault :: a -> Maybe a -> a
justOrDefault _ (Just x) = x
justOrDefault d _ = d
内置的
maybe
函数(注意小写字母)结合了前面两个函数:
maybe :: b -> (a -> b) -> Maybe a -> b
maybe _ f (Just x) = f x
maybe z _ Nothing = z
所以你指定一个
b
(默认值)和一个函数(a-
使用
也许
会很困难,因为您总是需要考虑无
的情况,为了简化这一点,您可以使用也许单子。
Tom Schrijvers还展示了
也许
是类型代数中的后继函数:您向类型添加一个额外的值(要么
是加法,(,)
是乘法的类型代数等价物)。
为了减少内核或跨进程内存泄漏(Spectre攻击),Linux内核1将使用一个新选项编译,引入到,以便通过所谓的retpoline执行间接调用。 这似乎是一个新发明的术语,因为谷歌搜索只是最近才使用(通常都是在2018年)。 1但是,它不是Linux特有的--类似或相同的构造似乎被用作其他操作系统缓解策略的一部分。
问题内容: 我不明白杰克逊的@JsonView( Views.MyClass.class )是什么。我知道我可以用这种方式注释POJO的字段和方法, 以过滤未 注释的字段和方法,以免它们被JSON序列化。但是,什么是Views.Myclass类?它是Jackson库的模板类吗? 为什么在Views类中可以有很多类?例如这样: 为什么需要它,它如何工作? 问题答案: 用于根据序列化的上下文过滤字段。
伙计们,最近我决定回到PHP,做一些比简单的登录页面更复杂的事情。3年来,我一直在Java /JavaEE编程,对Java应用程序的体系结构有很好的理解。基本上,一个虚拟机(一个简单的操作系统进程)运行被称为字节码的编译代码。一个简单的Javaweb服务器基本上是一个java应用程序,它监听提供给Http请求的TCP端口,并相应地做出响应,当然它更复杂但这是它最初的工作。 现在,PHP怎么样?它是
我搜索过,似乎这被称为列表理解,但它是如何工作的?
AAPT(安卓资产打包工具)是什么意思?它是如何工作的? 我可以使用AAPT将一个应用程序的文件发送到另一个应用程序的APK文件中吗?
问题内容: 我不太了解其工作原理和作用。 我的主要目标是将它与配合使用以提高精度。 问题答案: 使用要跟踪字符串和重复值 通常按项目本身跟踪每个项目。对于给定的阵列,试图跟踪由每个变化的。问题是我们有重复的值,而角度将引发错误。解决该问题的一种方法是通过其他方式对对象进行角度跟踪。对于字符串,这是一个很好的解决方案,因为您实际上没有其他跟踪字符串的方法。 并触发摘要和输入焦点 您暗示您对角度有些陌