Scala 自定义运算符(示例 abs)

标签 scala operator-overloading operators

我知道 scala 允许重载它的默认运算符(+、-!等)。是否可以定义自定义运算符并制作类似 |.| 的内容?运算符使得 | -3|计算结果为 3。或者定义像++++ 这样的运算符以便 a++++ b 等于 a+3*b?

最佳答案

你应该看看scala operators documentation .

您可以轻松地创建++++ 运算符,但不能创建 |.|运营商。

scala 中的运算符只是具有非字母数字名称的函数。由于 scala 还支持将 a.f(b) 调用为 f b,因此您可以实现第一个行为。例如:

case class A(v: Int) {
  def ++++(b: A): A = A(v + 3 * b.v)
}

val a = A(1)
val b = A(2)
a ++++ b
>> A(7)
a.++++(b) // just another way of doing the exact same call

如果你想将它添加到整数中,你只需创建一个隐式类来添加它。

另一种选择是给运算符加上前缀,例如考虑使用 -a 来获得否定。没有“第一个元素”可以将 - 应用于,而是 - 应用于 a(参见 this answer)。

例如:

case class A(v: Int) {
  def unary_!(): Int = -v
}
val a = A(3)
!a
>> -3

正在做 |.|有两个问题:首先,运营商有两个部分,即它是 split 的。第二种是使用|

为了做一个由两部分组成的运算符(比如 !.!),您可能想要生成一些私有(private)类型并从其中一个返回它!然后将其用作另一个的输入以返回输出类型。

第二个问题是|的使用这是一个非法字符。看this answer获取合法字符列表

关于Scala 自定义运算符(示例 abs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44782005/

相关文章:

C if 语句 OR AND 上的逻辑运算符

scala - 我在Scala中运行Spark WordCount时在Eclipse中出现错误

scala - 在 Scala 中查找函数应用值

c++ - 重载运算符 && 和 || 短路在 C++17 中

c++ - 不传递参数重载运算符

java - 位或运算符以不同方法工作的详细解释

c++ - 这个结构继承的类型是什么?

scala - 为什么 Scala 有路径依赖类型?

r - 在 Scala 或 Java 中加载包到 Renjin

c++ - 如何在层次结构中实现运算符使用?