(참고 : 2.8이 아닌 Scala 2.7.7을 사용하고 있습니다.)왜이 문장 중 하나는 스칼라에서는 컴파일되지만 다른 하나는 컴파일되지 않습니까?
간단한 2 열 CSV 파일의 값을 기반으로지도를 만드는 방법이 매우 간단합니다. 충분히 쉽게 완료했지만, 처음 시도한 이유에 대해 당황 스럽습니다. 컴파일하지 않았다.
// Returns Iterator[String]
private def getLines = Source.fromFile(csvFilePath).getLines
// This doesn't compile:
def mapping: Map[String,String] = {
Map(getLines map { line: String =>
val pairArr = line.split(",")
pairArr(0) -> pairArr(1).trim()
}.toList:_*)
}
// This DOES compile
def mapping: Map[String,String] = {
def strPair(line: String): (String,String) = {
val pairArr = line.split(",")
pairArr(0) -> pairArr(1).trim()
}
Map(getLines.map(strPair(_)).toList:_*)
}
컴파일러 오류가
CsvReader.scala:16: error: value toList is not a member of (St ring) => (java.lang.String, java.lang.String) [scalac] possible cause: maybe a semicolon is missing before `value toList'? [scalac]
}.toList:_*) [scalac] ^
[scalac] one error found
그래서이 제공
입니다 : 여기에 코드는? 그것들은 명시 적 함수 정의 (nonworking 예제에서는 익명)와()와 {}를 제외하고 나처럼 동등해야합니다. nonworking 예제에서 중괄호를 괄호로 바꾸면 오류가 " '; 예상했지만 '발'이 발견되었습니다. " 그러나 지역 변수 정의를 제거하고 문자열을 두 번 분할하고 중괄호 대신 괄호를 사용하면 컴파일됩니다. 누군가가 나에게이 차이점을 설명 할 수 있습니까? 스칼라 문서에 대한 링크를 사용하면 메서드 인수를 둘러싸는 데 사용할 때 괄호와 중괄호의 차이점을 설명 할 수 있습니까?