对Ruby语法感到困惑

时间:2015-08-28 15:15:04

标签: 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

我对def语法感到困惑。我知道它是功能但是何时使用{}以及何时使用[]。不知道它叫什么,所以我不能搜索互联网。 我有PHP知识,不熟悉这种语法。对于第一个,在php中我会写像

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

对于第二个,我会在函数内部创建一个数组。

请帮忙。希望很清楚。

2 个答案:

答案 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中的完全相同的语法。