Ruby:nil类的未定义方法*

Ruby:nil类的未定义方法*,ruby,undefined,Ruby,Undefined,我得到了在irb中运行的代码的未定义方法*。我正在Windows7X32上使用ruby 2.0.0p195(2013-05-14)[i386-mingw32]。它有两个简单的几何形状类 class Shape ERR = 'Error: area or perimeter method missing.' PI = 3.14159265358 attr_accessor :id def initalize(id = 'shape') @id = id end

我得到了在irb中运行的代码的未定义方法*。我正在Windows7X32上使用ruby 2.0.0p195(2013-05-14)[i386-mingw32]。它有两个简单的几何形状类

class Shape
  ERR = 'Error: area or perimeter method missing.'
  PI  = 3.14159265358
  attr_accessor :id

  def initalize(id = 'shape')
    @id = id
  end

  def get_area
    raise ERR
  end

  def get_perimeter
    raise ERR
  end

  def to_s
    "id: #{@id}, area: #{get_area}, perimeter: #{get_perimeter}"
  end
end

class Triangle < Shape
  attr_accessor :a, :b, :c, :h

  def initalize(id = 'triangle', a = 1, b = 2, c = 3, h = 4)
    @id = id
    @a, @b, @c, @h = a, b, c, h
  end

  def get_area
    @b * @h * 0.5
  end

  def get_perimeter
    @a + @b + @c
  end
end
类形状
ERR='错误:缺少面积或周长方法。'
PI=3.14159265358
属性存取器:id
def初始化(id='shape')
@id=id
结束
def get_区域
提出错误
结束
def get_周界
提出错误
结束
def至美国
id:#{@id},区域:#{get_区域},周长:#{get_周长}
结束
结束
类三角形<形状
属性存取器:a,:b,:c,:h
def初始化(id='三角形',a=1,b=2,c=3,h=4)
@id=id
@a、 @b,@c,@h=a,b,c,h
结束
def get_区域
@b*@h*0.5
结束
def get_周界
@a+@b+@c
结束
结束
这些是带有irb的命令

irb(main):001:0> load 'shapes.rb'
=> true
irb(main):002:0> tri = Triangle.new
=> #<Triangle:0x22d17c8>
irb(main):003:0> puts tri
NoMethodError: undefined method `*' for nil:NilClass
        from shapes.rb:41:in `get_area'
        from shapes.rb:28:in `to_s'
        from (irb):3:in `puts'
        from (irb):3:in `puts'
        from (irb):3
        from D:/Ruby/bin/irb:12:in `<main>'
irb(main):001:0>加载“shapes.rb”
=>正确
irb(主):002:0>tri=Triangle.new
=> #
irb(主):003:0>
NoMethodError:nil:NilClass的未定义方法“*”
来自shapes.rb:41:in'get_area'
来自形状。rb:28:in'to_'s
from(irb):3:in'puts'
from(irb):3:in'puts'
来自(irb):3
from D:/Ruby/bin/irb:12:in`'

您拼错了方法
initialize
,并且编写了
initialize


这就是为什么其中一个变量是
nil
和典型异常
NoMethodError:undefined方法。。。对于nil:NilClass
正在提升。

您的变量之一是nil。。。所以你不能乘零。