我知道 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/