<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 1. 標識符 - 變量名、函數名、類名等統稱為標識符,scala可以使用任何字符來作標識符,比如 `()!#%&×+-/:<>=?@\^|~` 等。 - 反引號中可以使用任何字符序列。 ~~~ val √ = scala.math.sqrt _ √(2) val `val` = 42 println(`val`) ~~~ ### 2. 中置操作符 - 操作符要接兩個參數,分別位于操作符兩邊。 - `a 標識符 b` 等價于 `a.標識符(b)` 。 ~~~ 1 to 10 等價于 1.to(10) 1 -> 10 等價于 1 .->(10) ~~~ ### 3. 一元操作符 - 只有一個參數的操作符成為一元操作符,操作符的位置可能位于參數的前或后,所有有下面兩種情況。 - `a 標識符` 等價于 `a.標識符()` ,`標識符 a` 等價于 `a.unary_標識符` 。 ~~~ 1 toString 等價于 1.toString() val a = 42 -a 等價于 a.unary_- ~~~ ### 4. 賦值操作符 - 賦值操作符的形式為 `操作符=`,表達式是 `a 操作符= b` ,等價于 `a = a 操作符 b` 。 ~~~ a += 1 等價于 a = a + 1 ~~~ - `<=、>=、!=、==、===、=/=` 等不是賦值操作符, ### 5. 優先級 - 后置操作符優先級低于中置操作符,`a 中置操作符 b 后置操作符` 等價于 `(a 中置操作符 b) 后置操作符` 。 - 符號優先級如下表所示: | 操作符 | 優先級 | |-----|-----| | 除下面字符以外的操作符 | 1(最高) | | * / % | 2 | | + - | 3 | | : | 4 | | < > | 5 | | != | 6 | | & | 7 | | ^ | 8 | | | | 9 | | 賦值操作符 | 10(最低) | ### 6. 結合性 - Scala除冒號操作符和賦值操作符是右結合,所有其他操作符都是左結合。 ~~~ // 構造列表List 1 :: 2 :: Nil // :: 右結合 1 :: (2 :: Nil) (1 :: 2) :: Nil // 錯誤 ~~~ - 右結合的的第二個參數就是方法,比如 `2::Nil` 等價于 `Nil.::(2)`。 ### 7. apply和update方法 - 函數或方法位于賦值語句的等號左側,調用的是update方法,否則調用的apply方法。 ~~~ val scores = new scala.collection.mutable.HashMap[String, Int] scores("Bob") = 100 等價于調用:scores.update("Bob", 100) val bobsScore = scores("Bob") 等價于調用:scores.apply("Bob") ~~~ ### 8. 提取器unapply - 提取器:是一個帶有unapply方法的對象,可以當做是伴生對象apply的方法的反操作。 - unapply接受一個對象,從中提取值。 ~~~ class Fraction(n: Int, d: Int) { private val num: Int = if (d == 0) 1 else n; private val den: Int = if (d == 0) 0 else d; def *(other: Fraction) = new Fraction(num * other.num, den * other.den) } // unapply返回的就是構造該對象的兩個值 object Fraction { def apply(n: Int, d: Int) = new Fraction(n, d) def unapply(input: Fraction) = if (input.den == 0) None else Some((input.num, input.den)) } object Main extends App { var Fraction(a, b) = Fraction(3, 4) * Fraction(2, 5) println(a) println(b) } ~~~ - 每個樣例類都會自動具備apply方法和unapply方法,樣例類后面章節會講解,這里只要了解就可以。 - 提取器可以只測試輸入而不真正將其值提取出來,只返回一個Boolean。 ### 9. unapplySeq方法 - 使用unapplySeq方法可以提取任意長度的值序列,它返回一個Option[Seq[A]],A是被提取的類型。 ~~~ // Name 提取器可以產生所有組成部分的序列 // 關于 Option,Some,None后面章節會詳細講解,這里只需了解upapplySeq的作用就可以。 object Name { def unapplySeq(input: String): Option[Seq[String]] = if (input.trim == "") None else Some(input.trim.split("\\s+")) } ~~~ 【待續】
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看