Scala School/Basics 학습 메모
7497 단어 Scala
소개
아마 그물에있는 가장 우수한 Scala 교재 중 하나 일 것입니다 Scala School
신경이 쓰이는 일이나 시도한 것 등을 부분적으로 망비록으로서 메모해 두려고 생각합니다.
Scala School은 설명이 매우 깔끔하기 때문에 그 보충이 되면 좋을까라고 생각합니다.
Lessons별로 기사는 나눕니다. 우선 첫번째 lesson인 basics에서.
본편
Anonymous function
Listing 1
val a = (x:Int) => x + 1
a(5) //結果は6
val b = (x:Int,y:Int) => x + y //複数の引数ももちろんOK
c(5,6) //結果は11
val c = (x:Int)(y:Int) => x + y //NG.匿名関数でcurriedの形はできない
val d = (x:Int) => (y:Int) => x + y //どうしても匿名でcurriedの形で書きたい場合はこうする
d(3)(7) //結果は10
scala에서는 패턴 c의 쓰는 방법을 curried function으로 하고 있습니다만, 본래는 d의 쓰는 쪽이 클로저를 이용한 정통인 curried function일지도 모릅니다.
익명이 아닌 curried function에 대해서는 후술.
Partial application
Listing 2
def adder(m:Int,n:Int) = m + n //まず定義
val addTwo = adder(2, _:Int) //1.これで部分適用できる
val addTwo = adder(2, _) //2.型指定を省略してもOK
val addTwo = adder(_, 2) //3.最後の引数だけでなくどの引数でもワイルドカードにできる
※편의적으로 addTwo라는 같은 이름을 여러 번 사용하고 있습니다. val이므로 실제로는 에러가 됩니다.
Curried functions
Listing 3
def multiply(m:Int)(n:Int) = m * n //関数を定義
val timesTwo = multiply(2) _ //4.OK
val timesTwo = multiply(2)(_) //5.OK
val timesTwo = multiply _(2) //6.エラー
val timewTwo = multiply(_)(2) //7.これもエラー
val timesTwo = multiply(_:Int)(2) //8.型指定を入れればOK
※ 편의적으로 timesTwo라는 같은 이름을 여러 번 (이하 약어
패턴 7은 missing parameter type이라는 오류가 발생하지만 이유를 잘 모르겠습니다.
stackoverflow에서 물어 보지만, 아직 답변 없음. (알고 계시면 부탁드립니다 )
scala의 버전에 따라 패턴 2. 또는 3.도 비슷한 오류가 발생합니다.
Variable length arguments
Listing 4
def capitalizeAll(args: String*) = {
args.map { arg =>
arg.capitalize
}
}
개인적으로 조금 걸렸던이 코드. 사실 인수는 {}에서도 입력할 수 있는 것 같습니다.
실제
println{"asdf"}
이것도 움직입니다.
식 그 자체도, 오브젝트·값으로서 맞붙기 때문에 이렇게 되어 있는 것일지도 모르겠네요. 자바의 습성이라도? 라고 생각했습니다.
이 후 scala school/basics에서는 클래스나 트레이트의 설명에 들어갑니다만, 그 엔은 특별한 신경이 쓰이는 곳도 없었으므로 생략합니다.
(나중에 뭔가 회상하고 추가할지도 모릅니다만)
Reference
이 문제에 관하여(Scala School/Basics 학습 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/watopin/items/a4a2ba6b9363e441ae82텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)