這裏是一個簡化的解釋和美化。
簡體,
scala> def f: String => String = {
| val i = 7
| { (x: String) =>
| "y"
| }
| }
<console>:9: error: Int(7) does not take parameters
{ (x: String) =>
^
<console>:12: error: type mismatch;
found : Unit
required: String => String
}
^
因爲7
之後的換行符未作爲一個分號,對於原因,它可能是一個功能應用此失敗;你可能需要一個支撐位於下一行的DSL。 Here is the little nl
in the syntax of an arg with braces.
換行處理的規範的1.2中描述;在本節的最後部分提到了幾個像這樣的點,其中接受一個nl
。
(兩個新行不行,這就是爲什麼還修復你的問題。)
注意到一個nl
不是在括號前面所接受,所以下面的工作(雖然只的括號,你只得到一個表達你的函數文本):
scala> def g: String => String = {
| val i = 7
| ((x: String) =>
| "y"
|)
| }
g: String => String
其實,對這個問題的代碼最好的編輯是不是更括號但數量較少:
scala> def f: String => String = {
| val i = 7
| x: String =>
| "y"
| }
f: String => String
The reason for this nice syntax是你的方法體已經是一個塊表達式,並且當一個塊的結果表達式是一個函數文本時,你可以簡化。
類型的x
也是多餘的。
scala> def f: String => String = {
| val i = 7
| x =>
| val a = "a"
| val b = "b"
| a + i + x + b
| }
f: String => String
毫不奇怪:
scala> def f: (String, Int) => String = {
| val i = 7
| (x, j) =>
| x + (i + j)
| }
f: (String, Int) => String
scala> f("bob",70)
res0: String = bob77
什麼是編譯錯誤?只是出於好奇:方法是否帶有第二個或隱含的參數? –
您是否嘗試過使用本地{...}來分隔'val'行和該塊? – Beryllium
編譯錯誤是'scales.xml.XPath [列表[scales.utils.Path [scales.xml.XmlItem,scales.xml.Elem,[T] scales.utils.ImmutableArrayProxy [T]]]]不帶參數',並且不,它不需要任何第二個或隱含的參數。有一些重名的方法具有相同的名稱,但它們都不是。 –