我不知道怎么说这个。我在几个地方看到了以下语法,比如
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
我对def语法感到困惑。我知道它是功能但是何时使用{}以及何时使用[]。不知道它叫什么,所以我不能搜索互联网。 我有PHP知识,不熟悉这种语法。对于第一个,在php中我会写像
function test ($a,$b)
{
$t=$a,
$h=$b
}
对于第二个,我会在函数内部创建一个数组。
请帮忙。希望很清楚。
答案 0 :(得分:4)
Ruby中的大括号({}
)或括号([]
)与def
本身无关。您的示例只是返回Hash / Array的简单方法。第一个例子相当于:
def test
return { t: a , h: b }
end
在Ruby中省略return
是合法的,返回的是最后一个表达式的值,在本例中是一个哈希。
要编写类似于您的示例的函数,只需编写
def test(a, b)
@t = a
@h = b
end
不需要牙箍/托架。
答案 1 :(得分:0)
我对def语法感到困惑。我知道这是功能
不,def
定义方法,而不是函数。 Ruby中没有函数。
但何时使用{}以及何时使用[]。不知道它叫什么,所以我无法搜索互联网。
{}
是Hash
字面值。在其他语言中,这可以称为 map ,字典或(在PHP中)关联数组。
[]
是一个Array
字面值。在其他语言中,这也可以称为 vector 或(在Python中) list 。请注意,它实际上在PHP中完全 相同,Ruby方法pieces
中的数组文字可以逐字剪切和粘贴到PHP函数中,它只会起作用,因为两个语法是相同的。
何时使用取决于你想用它做什么。数组允许您通过数字索引检索元素,哈希允许您通过任意键检索元素。
我有PHP知识,不熟悉这种语法。对于第一个,在php中我会写像
function test ($a,$b) { $t=$a, $h=$b }
不,这并不等同于Ruby版本。对于初学者,PHP函数有2个参数,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中的完全相同的语法。