2017-04-13 104 views
0

在面向對象的編程中,對象具有自己的狀態和行爲。對象狀態存儲在實例變量中,我們可以使用objectname來引用它們。Scala面向對象編程

instance.variablename符號用於參考場和實例方法由objectname.instancemethodname(parm..)調用。

但是在這裏Scala還有其他符號。

舉個例子:在Scala列出我所遇到以下符號:

l filter p

在這裏,l是單實例的名稱和p是爭論。

此場景將返回滿足謂詞p的元素列表。

所以我的問題是那個notaion是什麼,它是什麼意思?

+2

一個應該如何閱讀本無標點符號「段落」(如果你甚至可以把它叫做一個段落)?努力使其可讀。 –

+0

好吧,我同意你的意見 –

回答

2

Scala編譯器將l filter p重寫爲l.filter(p),因此它們在運行時被視爲相同,但它們看起來不同於讀者,因此是影響代碼可讀性的編程風格的選擇。

Scala將這種調用方式稱爲「infix notation」,它旨在支持將方法作爲諸如+*之類的操作。在Java中,運算符(如+)由JVM提供,但是在Scala中,它們可以在類上定義,然後使用與運算符由Java中的JVM定義的語法相同的語法來調用。

例如:

case class Foo(v:String) { 
    def +(o:Foo) = Foo(v + o.v) 
} 

Foo("a").+(Foo("b")) // equals Foo("ab") 
Foo("a") + Foo("b") // equals Foo("ab") 
+0

嗯...只是一個小細節 - 這是由Scala解析器照顧,而不是編譯器。 –

+1

@SarveshKumarSingh解析器是編譯器的一部分。 – puhlen