gpt4 book ai didi

operators - 如何修改 OCaml 中的一元运算符?

转载 作者:行者123 更新时间:2023-12-01 08:17:12 25 4
gpt4 key购买 nike

在 OCaml 中,很容易访问二元运算符,例如“+”:

# (+);;

( + ) : int -> int -> int

并按照我的意愿修改它们:
# let (+) = (+.);;

( + ) : float -> float -> float

在 Pervasives 文档中,它说 (~-)是对应于 (-) 的一元运算符, 意思是 ~-5返回 - :int = -5 .

很容易修改 (~-)还有:
let (~-) = (~-.);;

(~-) : float -> float

幸运的是,OCaml 允许用户使用 (-)作为 (~-) 的别名:

假设我们已经定义
foo : int -> int -> int

我们可以打电话
foo 1 (-1);;

这比
foo 1 (~-1);;

好吧,问题是,当我改变时 (~-)定义,它不影响一元运算符 (-) ...
let (~-) x = 5;;

~-2;;
- : int = 5

-2;;
- : int = -2

知道如何修改一元 (-)还有?

最佳答案

如你所说,一元(-)(~-) 的快捷方式.实际上,您的更改已经影响了一元(-) ;例如,您有很多方法可以使用 (-)覆盖后随心所欲 (~-) :

# - (2+0);;
- : int = 0

# let a = 2;;
val a : int = 2
# -a;;
- : int = 0

因此,当您将表达式传递给 (-) 时它会起作用.如果您调用 -2 ,它将被解析为一个值,而不是一个函数应用程序。遵循负数的正常约定是有意义的。

顺便说一句,我不建议您使用这种覆盖运算符的方式。既然你有零钱 (-)对于任何具有该运算符的数据类型,它都可能导致混淆和奇怪的错误。

关于operators - 如何修改 OCaml 中的一元运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8272425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com