2017-01-09 51 views
1

去年夏天我學習了groovy,並發現了構造函數的語法,您可以使用值指定參數名稱並初始化該值。例如:傳遞參數的parmname:value語法的起源是什麼?

Team team = new Team(name: "Bengals") 

在今年年底,我升級的IntelliJ這句法開始出現在我的Java功能,用不同的參數列表重載函數。 (這是不執行得非常好。這是混亂的,當我試圖改變這些值。我已經想通了,但執行不力。)

team.chant = (msg: "Who dey?"); 

,這很有趣,因爲我學習斯威夫特3,它使用相同的語法。

Swift 3似乎不太可能受到Groovy的影響,所以我很好奇。什麼語言對這些語言施加壓力以支持parmname:value語法?

在我看來,斯威夫特是基於我對Smalltalk知之甚少的。 Smalltalk是否支持這個參數語法?

+0

https://en.wikipedia.org/wiki/Named_pa​​rameter列出了許多支持命名參數的語言: Mathematica,Objective-C,PL/SQL,Python,R,Ruby,Scala,Smalltalk,Swift和Visual Basic。 – eMBee

+0

示例在這裏:http://rosettacode.org/wiki/Call_a_function和這裏:http://rosettacode.org/wiki/Named_pa​​rameters – eMBee

+0

有趣...新添加到C#中。可以看到Objective-C餵食Swift和C#。也許這就是壓力。 – Thom

回答

2

我不知道Swift和Groovy,所以我只能迴應Smalltalk部分。

Smalltalk不支持該語法,但具有非常像這樣讀取的關鍵字消息。

例如,

team := Team new name: 'Bengals'. 
team chant msg: 'who dey?' 

在Smalltalk中有效。

並非params的名稱在命令中,而是命令本身是#name :,它與某個實例變量的名稱相匹配,但是是一種設置它的值的方法......正如我所說的,它看起來是一樣的,但意義卻非常不同。 Ada,C#4.0+,Ceylon,ColdFusion標記語言(CFML),Common Lisp,Fortran,IDL,Kotlin,以及其他語言的支持命名參數的語言的數量:

相關問題