0

这是来自 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 方法有一个“选项”参数,然后我们传递该参数的状态部分?有人可以用一些更简单的词来解释这种语法吗?

4

2 回答 2

3

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

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

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

如果上面提到的行看起来像这样

thing = create_thing("Foo")

options将是“Foo”,您可能会在尝试执行类似的操作时遇到错误options[:status]

于 2013-01-28T21:27:55.970 回答
2

create_thing接受一个名为options.

选项应该是一个散列(很可能)。

您将带有键(符号)的哈希值传递:option给该set_status方法。

您已将隐式哈希传递create_thing

create_thing({ status: 'ok' })是一样的
create_thing(status: 'ok')是一样的
create_thing(:status => 'ok')

无论你怎么称呼它,你都可以通过options[:status].

于 2013-01-28T21:27:27.887 回答