gpt4 book ai didi

ruby - NoMethodError Ruby 类初始化

转载 作者:数据小太阳 更新时间:2023-10-29 08:46:37 25 4
gpt4 key购买 nike

我正在通过在线类(class)进行“类(class)介绍”练习。目标是创建一个用两个数字初始化的类 Calculator。然后可以对数字进行加、减、乘和除。我的代码似乎在本地环境中起作用:

class Calculator
def initialize(x,y)
@x, @y = x, y
end
def self.description
"Performs basic mathematical operations"
end
def add
@x + @y
end
def subtract
@x - @y
end
def multiply
@x * @y
end
def divide
@x.to_f/@y.to_f
end
end

但是网站有 Rspec 规范:

describe "Calculator" do
describe "description" do
it "returns a description string" do
Calculator.description.should == "Performs basic mathematical operations"
end
end
describe "instance methods" do
before { @calc = Calculator.new(7, 2) }
describe "initialize" do
it "takes two numbers" do
expect( @calc.x ).to eq(7)
expect( @calc.y ).to eq(2)
end
end
describe "add" do
it "adds the two numbers" do
expect( @calc.add ).to eq(9)
end
end
describe "subtract" do
it "subtracts the second from the first" do
expect( @calc.subtract ).to eq(5)
end
end
describe "multiply" do
it "should return a standard number of axles for any car" do
expect( @calc.multiply ).to eq(14)
end
end
describe "divide" do
it "divides the numbers, returning a 'Float' if appropriate" do
expect( @calc.divide ).to eq(3.5)
end
end
end
end

并且站点的规范抛出一个 NoMethodError:

NoMethodError
undefined method `x' for #<Calculator:0x007feb61460b00 @x=7, @y=2>
exercise_spec.rb:14:in `block (4 levels) in <top (required)>'

最佳答案

只需添加这一行

attr_reader :x, :y

修改后的代码:

class Calculator
attr_reader :x, :y

def initialize(x,y)
@x, @y = x, y
end
def self.description
"Performs basic mathematical operations"
end
def add
# once you defined reader method as above you can simple use x to get the
# value of @x. Same is true for only y instead of @y.
x + y
end
def subtract
x - y
end
def multiply
x * y
end
def divide
x.to_f/y.to_f
end
end

看看下面的规范代码:-

describe "initialize" do
it "takes two numbers" do
expect( @calc.x ).to eq(7)
expect( @calc.y ).to eq(2)
end
#...

您正在调用 @calc.x@calc.y。但是您没有在 Calculator 类中定义任何名为 #x#y 的方法作为实例方法。这就是为什么你得到非常明确的异常作为 NoMethod 错误

当您编写 attr_reader :x, :y 时,它会在内部为您创建这些方法。阅读此 answer理解 Ruby 中的 readerwriter 方法。

关于ruby - NoMethodError Ruby 类初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26162375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com