在Scala中导入特定的方法签名

在Scala中导入特定的方法签名,scala,importerror,ambiguous,Scala,Importerror,Ambiguous,是否有导入特定方法签名的方式 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 } 我想主要的挑战是所有方法都采用一个参数。我可以在没有()的情况下

是否有导入特定方法签名的方式

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 
}
我想主要的挑战是所有方法都采用一个参数。我可以在没有()的情况下调用任何参数方法,并且我可以创建一个方法调用链,该方法调用可以省略's,例如,
foo getX toString
,但我不知道如何自动创建arity-1调用


这是一个后续行动

否,没有导入特定方法签名的方法。

否,没有导入特定方法签名的方法。

代码问题:

trace "This is also"   // <- This line will not compile 
被解释为“事后操作”(见第6.12.2节),相当于调用:

e.op
因此,您的代码相当于:

trace."This is also"
这当然是一个编译错误

如果您改为使用
e1 op e2
(第6.12.3节)形式的“In fix操作”,则即使方法过载,也不会出现任何问题:

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

代码的问题是:

trace "This is also"   // <- This line will not compile 
被解释为“事后操作”(见第6.12.2节),相当于调用:

e.op
因此,您的代码相当于:

trace."This is also"
这当然是一个编译错误

如果您改为使用
e1 op e2
(第6.12.3节)形式的“In fix操作”,则即使方法过载,也不会出现任何问题:

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

该行不会编译,因为它显然是非法的。我想,错误消息只是试图理解它的编译器的产物。删除上面的行,同时保留导入和它之间的空行,看看它显示了什么。是的,这是一个完全不同的错误。我将更新该行不会编译的问题,因为它显然是非法的。我想,错误消息只是试图理解它的编译器的产物。删除上面的行,同时保留导入和它之间的空行,看看它显示了什么。是的,这是一个完全不同的错误。我将更新问题以详细说明。。。导入只涉及名称。因此,不能只导入特定的签名,不能导入给定名称的整个重载集。。。导入只涉及名称。因此,不能只导入特定的签名,只能导入给定名称的整个重载集。