Ruby:获取未定义的方法错误NoMethodError

时间:2016-09-26 20:58:34

标签: ruby

我是Ruby的新手。我的一项练习是删除Arrowhead编程并引发异常。我一直在undefined method for validate_region_and_shape

def self.classify(region, shape)
    # Alternative for raising exception within classify method
    #raise Error_Message unless CLASSIFICATIONS.include? (region)
    #raise Error_Message unless CLASSIFICATIONS[region].include? (shape)
    if validate_region_and_shape(region, shape)
    places = CLASSIFICATIONS[region][shape]
    "You have a(n) '#{places}'"
    end
  end

  def validate_region_and_shape(region, shape)
      raise Error_Message if valid_region?
      raise Error_Message if valid_shape?
  end

  def valid_region?
    CLASSIFICATIONS.include?(region)
  end

  def valid_shape?
    CLASSIFICATIONS[region].include?(shape)
  end

  end

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

在定义validate_region_and_shape?

时,您是否只有拼写错误?

编辑:

如果您需要摆脱异常,那么您可以尝试类似

的内容
def validate_region_and_shape(region, shape)
  CLASSIFICATIONS.include?(region) && CLASSIFICATIONS[region].include?(shape)
end

def classify(region, shape)
  # Alternative for raising exception within classify method
  #raise Error_Message unless CLASSIFICATIONS.include? (region)
  #raise Error_Message unless CLASSIFICATIONS[region].include? (shape)
  if validate_region_and_shape?(region, shape)
    arrowhead = CLASSIFICATIONS[region][shape]
    "You have a(n) '#{arrowhead}' arrowhead. Probably priceless."
  else
   raise Error_Message
  end
end

答案 1 :(得分:0)

你在这里发生了一些事情。例如,您为validate_region_and_shape方法使用了两个不同的名称。你用一个问号来调用它,但它是在没有问号的情况下定义的。所以,要么改变这个:

if validate_region_and_shape?(r... 

为:

if validate_region_and_shape(r... 

或改变:

def validate_region_and_shape(r... 

为:

def validate_region_and_shape?(r...

您还将其定义为实例方法(无self),但是从类方法中调用它。由于没有实例,因此没有具有该名称的实例方法。所以,你需要把它变成一个像第一个类的方法......

def self.validate_region_and_shape(region, shape)
  raise ...