以_!
結尾的方法如delete_!
或i_is_!
是否有特殊含義?他們是「名字」嗎?他們遵循一些約定嗎?甚至還有bulkDelete_!!
。 (具體情況是Lift,如果它有所作爲)。以_!結尾的方法在Scala中有特殊的含義?
10
A
回答
17
我不確定在Lift中使用_!
和_!!
的約定是什麼,但這裏有一些背景知識。
任何字母數字標識符都可以包含_和添加的符號列表,並且仍然可以將其解析爲單個標識符。例如:
scala> class [email protected]%*!
defined class Example_$bang$at$percent$times$bang
(事實上,你可以,如果你使用反引號括起來解析幾乎任何東西作爲標識符 - 這是你做什麼,如果一個Java類使用Scala的保留字,例如或者如果你想在你的標識符中有空格。)
然而編譯器只識別一個符號結尾。如果有一種方法看起來像一個getter,那麼getter_ =將被解釋爲一個setter。 (不管你實際使用它作爲一個二傳手是由你;它會有一個二傳手的語義,反正),所以
scala> class Q { def q = "Hi"; def q_=(s: String) { println(s.reverse) } }
defined class Q
scala> val q = new Q
q: Q = [email protected]
scala> q.q
res0: java.lang.String = Hi
scala> q.q = "Could use this to set something"
gnihtemos tes ot siht esu dluoC
此外,編譯器反轉主叫方和被叫方的順序任何方法結束於:
。這在列表中最常見:newElement :: existingList
實際上是對existingList.::(newElement)
的調用。因此,例如:
scala> object Caps { def to_:(s: String) = s.toUpperCase }
defined module Caps
scala> "Example" to_: Caps
res40: java.lang.String = EXAMPLE
_
+符號的任何其他用法都是約定。
8
6
到目前爲止,奇怪地未提及的(儘管與你的問題沒有特別的關係)是一元的!這是專門處理。
scala> class A { def unary_! = 5 }
defined class A
scala> !(new A)
res0: Int = 5
+2
它跟unary_有更多的關係,那麼最後你可以有unary_ +例如 – 2013-02-13 13:49:24
相關問題
- 1. 確實「r0」,「r1」等在Scala中有特殊含義嗎?
- 2. 「\ h」有特殊含義嗎?
- 3. 特殊字符>:和<:scala中的含義?
- 4. 做有&特殊含義的符號嗎?
- 5. 定義特殊方法
- 6. $是否在變量的末尾有特殊意義?
- 7. URL中「+」的特殊含義是什麼?
- 8. 有人可以解釋這些特殊變量的含義嗎?
- 9. 定義的特殊字符含義
- 10. 在C++中有「typedef」的任何特殊含義嗎?
- 11. 01208在python中有特殊含義還是python2.6.2的一個bug?
- 12. 以特殊字符結尾的C#字符串到整數
- 13. Apache Lucene 5.5.3 - 搜索以特殊字符結尾的字符串
- 14. PHP:$ _this有特殊含義嗎?
- 15. <降價有特殊含義?
- 16. 在Ruby中可以定義一個名稱以(冒號)結尾的方法嗎?
- 17. 我在哪裏可以找到Scala中所有特殊特徵的列表?
- 18. 如何刪除帶有特殊字符的字符串結尾?
- 19. 如果包含在結尾的特定列表中,則刪除單詞結尾
- 20. - =和+ =在Scala中的含義特徵定義
- 21. 指針值的特殊含義0x7c7c7c7c
- 22. Linux特殊shell的含義問題
- 23. CSS3和HTML5 *特殊字符的含義
- 24. 如何在Scala中定義特定容器類型的方法?
- 25. 模型中的「完整」屬性是否有特殊含義?
- 26. 在Python中以#開頭的評論有特殊意義嗎?
- 27. 重寫特殊的方法
- 28. Android中的Scala中的TableLayout.LayoutParams.WRAP_CONTENT以編譯器錯誤結尾
- 29. '@'符號在Javascript,Coffeescript或Jquery中有特殊含義嗎?
- 30. 做AND,OR字符串在PLY中有特殊含義嗎?
哇。偉大的講座。我幾乎不知道這一點。謝謝! – aioobe 2010-06-22 21:12:05
'_'用於將單詞字符組與符號字符分開。所以'foo _ !! _ bar'是一個合法的標識符。如果你不想遵循這個規則,或者需要使用保留字,你也可以用反引號括起來。例如,這對於調用名爲'type'的java方法很有用。 – retronym 2010-06-22 21:16:40
@retronym - 反引號的好點;我會補充一點。嘗試在REPL中輸入'val foo _ !! _ bar = 0',雖然.... – 2010-06-22 21:24:37