Scalaのクラスなど2

高階関数

  • def それはむしろ機能よりも、メソッドを定義しています
  • 変数関数を直接呼び出すことができるように存在するだけでなく、他のに渡された値の関数として
  • _ 一般的な方法は、接尾辞の関数となります: ceil _
    • コンテキストが自動的にメソッドの関数としてコンパイラを変換することができる、省略されてもよい_サフィックス
  • 関数高階関数、受信機能
  • パラメータの導出を入力
    • 他の関数またはメソッドへの匿名の伝達関数、匿名関数パラメータタイプを省略することができるまでパラメータタイプは、タイプを自動的に導出することができる場合
    • 一つだけのパラメータを省略することができたときにブラケット
      • 右のパラメータは一度しか表示されたら、使用することができる_速記を
  • クロージャクロージャ、特定の範囲
  • SAM、単一抽象メソッドインタフェース
    • インタフェースに対応するJava関数(1.8)
    • Scalaの機能は、Javaへ渡すことができる唯一の関数リテラルを働きます
  • カリー化のカリー化
    • 受信機能は、最初のパラメータを受信した2つのパラメータの関数となり、関数は、第2のパラメータ消費の関数を返します
  • 抽象コントロール抽象化
    • Scalaは、フロー制御文の少量しか含まれ、ユーザーは、制御文をカスタマイズすることができます

パターンマッチングとケースクラス

  • これは、上から下へ順に一致する、パターンマッチングの任意のタイプであってもよいです
  • 代わりに、パターンマッチングのswitch、デフォルトのブランチcase _避ける; switchの欠如によって声明をbreakもたらすfall-through問題を
  • 直接変数の戻り値に割り当てることができる発現パターンマッチング、
  • パターンガード/ガードは、設定条件に一致するように、任意のBoolean条件は、ガードモードとして使用することができます。case ... if ... => ...
  • case変数名または対応するデータ構造体変数名に接続されているキーワードを使用し、その後、試合は変数に代入されますが、変数名は小文字で始めなければなりません
  • 使用し|、同じ試合で別の複数のオプションを、この時間は、変数バインディング要素で使用されていません
  • タイプのマッチング、代わりにisInstanceOf、とasInstanceOfの直接型変換
    • 変数名のタイプを指定する必要があり、それは、オブジェクトの実際の型と一致しました
    • 一般的なJVMが消去される一方マッチは、実行時に発生します
      • 特定の一致しない場合がありますMapタイプを(利用可能case Map[_, _]、利用できませんcase Map[Int, Int]
      • Array タイプが消去されていません
  • 解体の構造化代入
    • マッチング配列

      case Array(x, y) => s"$x $y"  // 匹配长度为2的数组,并将分别绑定到 x, y
      case Array(0, rest @ _*) => rest.min // 可变参数
    • 試合 List

      case x :: y :: Nil => ...  // 绑定参数
      case head :: tail => ...  // 解构 head , tail
    • タプルをマッチング

      case (0, _) => ... // 匹配第一个元素为0
      case (x, y) => ... // 绑定参数
  • 変数の定義、注意が小文字始めなければなりません。実際にと同等のmatchプラスの割り当てパターンマッチング
    • val (x, y) = (1, 2)
    • val Array(f, s, rest @ _*) = arr
  • forコレクションをループ、対象と整合素子

    for ((k, v) <- System.getProperties()) println(s"$k $v")
    // 匹配 value 为 "" 的项,其他的则被忽略
    for ((k, "") <- System.getProperties()) println(k)
    // if guard 过滤
    for ((k, v) <- System.getProperties() if v == "") println(k)
  • ケースクラス
    • 特定のクラスのためのパターンマッチング
    • デフォルト設定パラメータvalデフォルトの提供applyunapplytoStringequalshashCodecopy
      • copy コピーのためのオブジェクトは、パラメータの名前付きプロパティを変更するために使用することができる場合には
    • case class Xあなたが使用している場合case X() => ...、あなたは括弧を必要とします
    • case object Sシングルトン、使用case S => ...、ないかっこ
    • ::また、インフィックス発現マッチングの場合クラスは、一般的な方法でありcase head :: tail、実際の呼出し::(head, tail)
    • ネストされた構造を使用することができる、バインド変数、変数パラメータは、同様のマッチング
    • 以下のような固定構造、クラスのためにList他の
  • sealed 封印
    • クラスを変更し、そのサブクラスは同じでクラスファイルを定義する必要があります
    • コンパイル時には、すなわちすべてのマッチの可能性を判断
  • Option また、値が存在するかどうかを示すために、ケースクラスを使用
    • サブクラスのSomeサブクラスがカプセル化値Noneは値を表していません
    • 使用と比較し""たりnull、より安全な
    • Map実行get操作戻るもOption、パターンマッチング処理に使用することができます
    • getOrElse 指定された値を使用して取得していない、値を取得してください
  • 部分関数部分関数
    • 機能は、すべての入力のために定義されていません
    • applyパターンマッチングから算出関数値は、isDefinedAt入力パターンが定義されて一致するか否かを判断します
    • case 声明は、部分的な機能ブロックであります
    • PartialFunction[A, B]例として、A入力タイプの、B出力タイプ
      • 部分的な機能を使用することができるlift方法を、従来のバイアスの関数は、関数、戻り値となりますOption[B]
      • また、することができますFunction.unlift返されるOption[B]関数は、部分の関数となります
    • Seq[A] また、一部の機能 PartialFunction[Int, A]
    • Map[K, V] また、一部の機能 PartialFunction[K, V]
    • catchステートメントは部分関数であり、次のことができcatch、異常なパターンマッチング処理ブロックを使用します

コメント

  • 以下のようなコードのコンパイルスカラ座、注釈、@BeanProperty自動的に生成されましたgetter/setter
  • これは、クラス、メソッド、フィールド、変数、パラメータなどのために使用することができます
    • これ以上の注釈順ません
    • 注釈主なコンストラクタはカッコが必要です class Credential @Inject() (var username: String, var password: String)
    • 注釈の発現は、セミコロン注釈付きの方法を使用します (map.get(key): @unchecked) ...
    • 注釈パラメータの種類、class Test[@specialized T]
    • 次のタイプのノートの実際の種類、def name: String @Localized
  • 実現注意事項
    • ノートは継承しなければなりません Annotation
    • 注釈の種類は継承しなければなりません TypeAnnotation
    • 元のノート@param@field@getter@setter@beanGetter@beanSetter
  • Javaの修飾子に対応し、マーカーインタフェース
    • @volatile対応するvolatileキーワード
    • @transient対応するtransientキーワード
    • @strictfp対応するstrictfpキーワード
    • @native対応するnativeキーワード
    • @cloneable 対応 Cloneable
    • @remote 対応 java.rmi.Remote
    • @SerialVersionUID 代わりに、フィールドのシーケンスの
  • 使用し@throws(classOf[Exception])処理するためのJavaの未チェックの例外を
  • @varargs 可変プロセスパラメータ
    • @varargs def name(args: String*) 生成 void name(String... args)
    • ない@varargs変数パラメータが変換されますSeq[T]
  • 最適化
    • @tailrec 私たちは、循環にそれを回す、末尾再帰呼び出しを最適化しよう
    • @switchコンパイラのチェックmatch式がコンパイルされているかどうableswitchlookupswitch表現は例外がスローされ、一連の条件にコンパイルされている場合、
    • @inline@noinlineコンパイラは、行内メソッド呼び出しを置き換えるかどうかがおすすめ
    • @elidable標識のため取り外し可能なタグの製造方法では
      • elidableパラメータは、デフォルトで指定されていない場合、オブジェクトの数は、直接一定のレベルを使用することができる定義することであり、SERVERE1000(1000を含みます)
    • @specialized 処理台型、型に対応する塩基を生成する自動包装方法

おすすめ

転載: www.cnblogs.com/yuanzam/p/11614233.html