2016-09-26 95 views
-1

我是Ruby新手。我的一个练习是去除箭头编程并引发异常。我不断收到undefined method for validate_region_and_shapeRuby:获取未定义的方法错误NoMethodError

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 

任何帮助将不胜感激。

+0

你的代码不能编译,你有一个太多的'end'。缩进使得它看起来像'def'在def self.classify'里面。你也大幅改变了代码,新代码没有你原来的问题。目前还不清楚你在问什么。 – Schwern

+1

另外,应该'valid_region?'方法将'region'作为一个arg,同样'valid_shape'要''形状'? – Rashmirathi

回答

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 
+0

我试过了。他们建议何时调用一个方法?除了返回真或假以外,不应该做任何事情。它不应该引发例外。我试图用单独的方法进行验证。 – Skipoura

+0

@YoussefKaib你在问什么不是很清楚,你能详细说明你正在做什么吗?我编辑了我的答案,是你想要做的事情。 – Rashmirathi

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 ... 
相关问题