5

問題のコードは次のとおりです。

val oauth_params = IMap(
      "oauth_consumer_key" -> consumer.key,
      "oauth_signature_method" -> "HMAC-SHA1",
      "oauth_timestamp" -> (System.currentTimeMillis / 1000).toString,
      "oauth_nonce" -> System.nanoTime.toString
    ) ++ token.map { "oauth_token" -> _.value } ++
      verifier.map { "oauth_verifier" -> _ }

質問 1:どの Scala 機能が"oauth_consumer_key" -> consumer.key存在し、引数として渡されることを可能にしましたか?

質問 2:とを見val oauth_params = IMap(...)て、値を渡すために通常の ではなくtoken.map {...}どの操作を使用しますか? 特定のルールはありますか?また、関連する問題である場合、ループで両方を使用できるのはなぜですか?{}()for

機能が他の場所で使用されているのを見たので、ここで質問します。また、両方の質問が関連していると思います。

4

1 に答える 1

7

順番に:

->で定義されPredef.scala、コンパイル中に他の Scala ソース内にインポートされます。

final class ArrowAssoc[A](val x: A) {
  @inline def -> [B](y: B): Tuple2[A, B] = Tuple2(x, y)
  def →[B](y: B): Tuple2[A, B] = ->(y)
}
implicit def any2ArrowAssoc[A](x: A): ArrowAssoc[A] = new ArrowAssoc(x)

ご覧のとおり、任意のオブジェクトを ArrowAssoc[A] に変換する暗黙の変換があり、Tuple2[A,B] を返すメソッド ->[B] があります。

IMap(...) メソッド IMap.apply(...) の呼び出しです。Scala では、メソッドが apply という名前の場合、省略できます。この場合、Scala の非常に一般的なパターンでファクトリ メソッドとして使用されます。

class MyClass(....) {

}
object MyClass{ 
   def apply(....): MyClass = new MyClass(....)
}

val a = MyClass(a,b,c)

今見たのは、Scala クラスとそのコンパニオン オブジェクトです。クラスと同じソース ファイルで定義する必要があり、クラス自体のプライベート フィールドと保護フィールドにもアクセスできるシングルトンです。

map 関数は、同じ型のコレクションを受け取り、異なる型を返す関数を受け取ります。例: List(1,2,3).map ( x => x * 2). ( ) と { } は、case コンストラクトを除いて、Scala では交換可能です。

于 2012-07-10T13:43:25.767 に答える