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