2015-08-28 173 views
0

我不知道如何把這個。我看到下面的語法在幾個地方,像關於Ruby語法的困惑

def test 
{ 
t: a, 
h: b 

} 
end 

..

def pieces 
    [ 
     'the horse and the hound and the horn that belonged to', 
     'the farmer sowing his corn that kept', 
    ] 
    end 

我迷惑關於高清的語法。我知道這是功能,但何時使用{}以及何時使用[]。不知道它叫什麼,所以我無法搜索互聯網。 我有PHP的知識,不熟悉這種類型的語法。對於第一個,在PHP我會寫如

function test ($a,$b) 
{ 
$t=$a, 
$h=$b 
} 

第二個,我會創建一個函數內的數組。

請幫忙。希望它是明確的。

回答

4

Ruby中的花括號({})或括號([])與def本身無關。你的例子只是返回Hash/Array的簡單方法。第一個例子是等價於:

def test 
    return { t: a , h: b } 
end 

在Ruby中是合法的省略return,則返回最後一個表達式的值比,在這個例子中的哈希值。

要寫出類似的功能,以您的例子,只寫

def test(a, b) 
    @t = a 
    @h = b 
end 

不需要大括號/括號。

0

我迷惑關於高清的語法。我知道這是功能

不,def定義了一個方法,而不是一個函數。 Ruby中沒有函數。

但是當使用{},何時使用[]。不知道它叫什麼,所以我無法搜索互聯網。

{}是一個Hash字面值。在其他語言中,這可能被稱爲字典或(在PHP中)關聯數組

[]Array字面。在其他語言中,這也可以被稱爲矢量或(在Python)一列表。請注意,它實際上是正是在PHP中一樣,數組從Ruby的方法pieces字面可以切割&逐字粘貼到PHP函數,它只會工作,因爲兩種語法是相同的。

時使用哪個取決於你想用它做什麼。數組允許您通過數字索引檢索元素,散列允許您通過任意鍵檢索元素。

我有PHP的知識,不熟悉這種類型的語法。對於第一個,在PHP中我會寫這樣

function test ($a,$b) 
{ 
$t=$a, 
$h=$b 
} 

不,這絕不等同於Ruby的版本。對於初學者來說,PHP函數有兩個參數,Ruby的方法0。這將相當於Ruby的方法是這樣的:

def test(a, b) 
    @t, @h = a, b 
end 

我不知道PHP,所以藉此與一粒鹽,但我相信,這些都是等價的PHP函數:

function test() { return [ 't' => this->a, 'h' => this->b ]; } 
// since `a` and `b` in the Ruby method aren't variables, they can only be methods 

function pieces() { 
    return [ 'the horse and the hound and the horn that belonged to', 
      'the farmer sowing his corn that kept' ]; 
}; 

正如你所看到的,在Ruby中數組文本語法實際上是完全相同語法在PHP。