2015-08-28 174 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。