0

特定のメソッドシグネチャをインポートする方法はありますか?

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)}

主な課題は、すべてのメソッドが1つの引数を取ることだと思います。()なしで引数なしのメソッドを呼び出すことができ、。の例を省略したメソッド呼び出しのチェーンを作成できますがfoo getX toString、arity-1呼び出しを自動的に作成する方法がわかりません

これは、この質問のフォローアップです。

4

2 に答える 2

3

いいえ、特定のメソッド シグネチャをインポートする方法はありません。

于 2013-02-16T04:23:04.987 に答える
3

コードの問題:

trace "This is also"   // <- This line will not compile 

のオーバーロードされたバリアントをインポートしすぎているということではありませtraceん。Scala の中置記法をこのように使用できないということです。次のような表現:

e op

「後置操作」として解釈されます ( Scala 言語仕様のセクション 6.12.2 を参照)。呼び出しと同等です。

e.op

したがって、コードは次のようになります。

trace."This is also"

もちろんコンパイルエラーです。

代わりにフォームの "Infix Operation" ( Scala 言語仕様e1 op e2のセクション 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
于 2013-02-16T20:42:28.410 に答える