是否有导入特定方法签名的方式?
def test() {
lazy val log = LoggerFactory.getLogger("AndroidProxy")
import log.{error, debug, info, trace}
trace("This is a test")
trace "This is also" // <- This line will not compile
}
也许这是不可能的,但我的主要目标是在不添加新方法的情况下允许此操作。我试过这些无济于事
import log.{error => error(_:String)}
import log.{error(x: String) => error(x)}
我认为主要挑战是所有方法都采用一个参数。我可以在没有()的情况下调用无参数方法,并且我可以创建一个方法调用链,它们省略了。 foo getX toString
,但我不知道如何自动创建arity-1呼叫
这是this question的后续内容。
答案 0 :(得分:3)
不,没有办法导入特定的方法签名。
答案 1 :(得分:3)
代码问题:
trace "This is also" // <- This line will not compile
不您以某种方式导入了过多的trace
重载变体 - 这就是您不能以这种方式使用Scala的中缀表示法。表达式如下:
e op
被解释为“Post fi x Operation”(参见Scala Language Specification的第6.12.2节),相当于电话:
e.op
所以你的代码将等同于:
trace."This is also"
这当然是编译错误。
如果您改为使用e1 op e2
形式的“In fi x Operation”(Scala Language Specification的第6.12.3节),那么即使方法过载也没有任何问题:
scala> class Logger { def trace(s: String) = "1arg"; def trace(i: Int, s: String) = "2arg" }
defined class Logger
scala> val log = new Logger
log: Logger = Logger@63ecceb3
scala> log trace "This is also"
res0: String = 1arg