NoMethodError Ruby在类上初始化

杰克·波普

我正在通过在线课程进行“课堂介绍”练习。目的是创建一个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)>'
奥雅纳(Arup Rakshit)

只需添加此行

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但是您没有在类中定义任何名为as#x#yas实例方法的方法Calculator这就是为什么您有非常​​明确的异常原因NoMethod error

当您编写时attr_reader :x, :y,它将在内部为您创建这些方法。阅读这个答案,了解读者作家方法在Ruby中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ruby:NoMethodError

来自分类Dev

Ruby-使用某些函数进行常量初始化会产生NoMethodError

来自分类Dev

NoMethodError Ruby设置

来自分类Dev

ruby 模块中的 NoMethodError

来自分类Dev

.save上的Rails NoMethodError

来自分类Dev

NoMethodError尝试使用Ruby RestClient

来自分类Dev

Ruby NomethodError用于多维数组

来自分类Dev

Ruby on Rails的will_paginate-NoMethodError

来自分类Dev

Ruby类初始化

来自分类Dev

Ruby类初始化

来自分类Dev

Ruby类初始化重写模块初始化

来自分类Dev

向Ruby类添加的方法在MiniTest中抛出NoMethodError

来自分类Dev

Ruby的body_permitted?给出“ NoMethodError”的方法

来自分类Dev

Ruby on Rails:Category#new中的NoMethodError

来自分类Dev

在Ruby中定义模块内部的方法(NoMethodError)

来自分类Dev

Ruby:NoMethodError,但是为什么呢?

来自分类Dev

Ruby on Rails模型中的'NoMethodError:undefined method'

来自分类Dev

为什么我在Ruby中收到NoMethodError?

来自分类Dev

Ruby on Rails的Nil测试-NoMethodError Nil:class

来自分类Dev

Ruby on Rails模型中的'NoMethodError:undefined method'

来自分类Dev

Ruby的body_permited?给出“ NoMethodError”的方法

来自分类Dev

为什么我在Ruby中收到NoMethodError?

来自分类Dev

ruby - NoMethodError:未定义的方法“状态”

来自分类Dev

抛出“ NoMethodError”的Model类中的枚举

来自分类Dev

初始化Ruby类的惯用方式

来自分类Dev

Codecademy Rails教程中的NoMethodError线程化

来自分类Dev

面向nil:NilClass的Ruby未定义方法“ []”(NoMethodError)

来自分类Dev

在Ruby on Rails网站上实现Instagram Gem时出现NoMethodError

来自分类Dev

Ruby on Rails NoMethodError“未定义的方法'translates'”

Related 相关文章

热门标签

归档