带有附加参数的scala中缀函数

mgdq6dx1  于 2023-05-22  发布在  Scala
关注(0)|答案(3)|浏览(211)

在scala中,有没有一种方法可以创建一个可以传递附加参数的函数?
就像这样:a op(additionalParam) b
编辑:我很确定这是不可能的。也许有人能说服我最后我只需要传递一个数字给op

twh00eeo

twh00eeo1#

不,语言规范有以下内容:

InfixExpr       ::=  PrefixExpr
                  |  InfixExpr id [nl] InfixExpr
PrefixExpr      ::=  [‘-’ | ‘+’ | ‘!’ | ‘~’] SimpleExpr

因此,中缀只适用于两个表达式之间的简单idid是由第一个表达式返回的对象上的方法的名称,该方法的参数与第二个表达式的类型兼容。

weylhg0b

weylhg0b2#

我不这么认为,但你可能会做这样的事情。

class A {
  def op(b: B): C = new C
  def op(otherParam: OP): A = new A
}

import scala.language.postfixOps

a op b //->C
a op addedParam op b //->C

只需将ABCOP类型替换为更有意义的类型即可。

nwsw7zdq

nwsw7zdq3#

是的,你可以使用can pass multiple arguments to infix operators(在Scala 2和Scala 3中),但是具体的语法与你的例子不同:将所有参数写在运算符右侧的括号中,顺序与声明它们的顺序相同:

class A {
  def op(b: B, additionalParam: AP) = ???
}

a op (b, additionalParam)

实际上,如果op被重载,它优先于一个元组参数:

class A {
  def op(b: B, additionalParam: AP) = "two arguments"
  def op(b: (B, AP)) = "one argument"
}

a op (b, additionalParam)    // two arguments
a op ((b, additionalParam))  // one argument

相关问题