我不知道電梯,但這是一個普遍的問題。首先,在::
是Scala的缺點運營商:
scala> 1 :: 2 :: List(3, 4)
res0: List[Int] = List(1, 2, 3, 4)
這意味着super.validations
是某種序列和valMinLen(3, "Link URL must be at least 5 characters") _
是在該列表中的一個值。
從它看起來很明顯,在重寫validations
方法,他們都呼籲super
版本上下文和之初前面加上一些額外的驗證。
這個額外的驗證是通過致電valMinLen()
創建的。然而,這個額外的調用不會返回一個匹配validations
列表類型的元素 - 而是一個函數。我們明確表示(不包括前置函數值)(通過添加_
後綴),我們希望自己添加一個函數,而不是該函數的返回值。
代碼段是勝過千言萬語:
scala> def f = 3
f: Int
scala> def g = 4
g: Int
scala> val listOfInts = List(f, g)
listOfInts: List[Int] = List(3, 4)
scala> val listOfFunctions = List(f _, g _)
listOfFunctions: List[() => Int] = List(<function0>, <function0>)
比較的listOfInts
和listOfFunctions
類型。我相信f _
語法在Scala世界中被稱爲部分應用函數。
所以你可以在聲明它之前引用'minimumValidation'? – ziggystar 2012-01-11 11:07:38
聲明順序在scala中無關緊要,它不適用於大多數當前的語言。 – Ramses 2012-01-12 11:48:38