了解参数如何在Ruby中工作

时间:2013-01-28 21:24:08

标签: ruby

以下是RSpec代码的示例代码:

describe Thing do
  def create_thing(options)
    thing = Thing.new
    thing.set_status(options[:status])
    thing
  end

  it "should do something when ok" do
    thing = create_thing(:status => 'ok')
    thing.do_fancy_stuff(1, true, :move => 'left', :obstacles => nil)
    ...
  end
end

所以我的困惑主要在于这一行:

thing.set_status(options[:status])

所以create_thing方法有一个“option”参数然后我们传递该参数的状态部分?有人能用一些更简单的词来解释这种语法吗?

2 个答案:

答案 0 :(得分:3)

options只是一个变量。您需要了解的部分是这部分

thing = create_thing(:status => 'ok') 

您基本上是将Hash传递给create_thing,因此options是一个哈希值。然后,您可以通过执行status来访问options[:status]密钥的值。

如果上述行看起来像这样

thing = create_thing("Foo")

options将是“Foo”,您可能会在尝试执行options[:status]

之类的操作时遇到错误

答案 1 :(得分:2)

create_thing采用名为options的参数。

期望选项是哈希(最有可能)。

您正在使用键(符号):option将哈希值传递给set_status方法。

已将隐式哈希传递给create_thing

create_thing({ status: 'ok' })
相同 create_thing(status: 'ok')
相同 create_thing(:status => 'ok')

无论如何,只要通过options[:status] 访问该值,

即可。