在 ruby 2.0 中无法将关键字参数值分配给 ivars
Trouble assigning keyword argument values to ivars in ruby 2.0
我正在尝试使用具有默认值的关键字参数为 ruby 2.1.5 中的 class 编写构造函数,但是对实例变量的赋值似乎不起作用:
class Base
attr_accessor :name
def initialize name: "void",
contents: []
@name = name
@contents = contents
end
end
在我的 rspec 测试中:
it 'should take optional param name' do
subject { Base.new(name: "fnordland") }
expect(subject.name).to eq "fnordland"
end
像这样失败:
2) Base initialize should take optional param location_name
Failure/Error: expect(subject.name).to eq "fnordland"
expected: "fnordland"
got: "void"
(compared using ==)
初始化程序在 IRB 中按预期工作,但测试失败。
我从骨子里知道这可能是非常小而且完全愚蠢的事情,但我很困惑 - ruby 2.1 中将关键字参数分配给 ivars 的示例似乎表明这应该有效。
您的测试用例的顺序似乎有问题。使用 RSpec DSL,有时会有点混淆什么可以去哪里。您需要执行以下任一操作:
it 'should take optional param name' do
base = Base.new(name: "fnordland")
expect(base.name).to eq "fnordland"
end
或:
subject { Base.new(name: "fnordland") }
it { expect(subject.name).to eq "fnordland" }
我正在尝试使用具有默认值的关键字参数为 ruby 2.1.5 中的 class 编写构造函数,但是对实例变量的赋值似乎不起作用:
class Base
attr_accessor :name
def initialize name: "void",
contents: []
@name = name
@contents = contents
end
end
在我的 rspec 测试中:
it 'should take optional param name' do
subject { Base.new(name: "fnordland") }
expect(subject.name).to eq "fnordland"
end
像这样失败:
2) Base initialize should take optional param location_name
Failure/Error: expect(subject.name).to eq "fnordland"
expected: "fnordland"
got: "void"
(compared using ==)
初始化程序在 IRB 中按预期工作,但测试失败。 我从骨子里知道这可能是非常小而且完全愚蠢的事情,但我很困惑 - ruby 2.1 中将关键字参数分配给 ivars 的示例似乎表明这应该有效。
您的测试用例的顺序似乎有问题。使用 RSpec DSL,有时会有点混淆什么可以去哪里。您需要执行以下任一操作:
it 'should take optional param name' do
base = Base.new(name: "fnordland")
expect(base.name).to eq "fnordland"
end
或:
subject { Base.new(name: "fnordland") }
it { expect(subject.name).to eq "fnordland" }