高階関数
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
デフォルトの提供apply
、unapply
、toString
、equals
、hashCode
、copy
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
式がコンパイルされているかどうableswitch
かlookupswitch
表現は例外がスローされ、一連の条件にコンパイルされている場合、@inline
、@noinline
コンパイラは、行内メソッド呼び出しを置き換えるかどうかがおすすめ@elidable
標識のため取り外し可能なタグの製造方法ではelidable
パラメータは、デフォルトで指定されていない場合、オブジェクトの数は、直接一定のレベルを使用することができる定義することであり、SERVERE
1000(1000を含みます)
@specialized
処理台型、型に対応する塩基を生成する自動包装方法