2016-09-26 7 views
-1

Rubyを初めて使用しました。 Arrowheadプログラミングを削除して例外を発生させる私の練習の1つ。私はundefined method for validate_region_and_shapeを得続けます。Ruby:未定義のメソッドエラーを取得する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

...それ最初のもののようなクラスメソッドにする必要があります。字下げは、 'def'sが' def self.classify'の中にあるように見せます。コードを大幅に変更しても、新しいコードには元の問題はありません。あなたが何を求めているのかは不明です。 – Schwern

+1

また、 'valid_region?'メソッドはargとして 'region'を取り、同様に' valid_shape'は '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

ような何かを試みることができますここではほとんど起こりません。 1つは、validate_region_and_shapeメソッドに2つの異なる名前を使用しています。あなたは疑問符でそれを呼んでいますが、それは誰にも定義されていません。だから、これを変更し、次のいずれか

if validate_region_and_shape?(r... 

へ:

if validate_region_and_shape(r... 

または変更:

def validate_region_and_shape(r... 

へ:また、インスタンスとしてそれを定義している

def validate_region_and_shape?(r... 

メソッド(no self)ですが、クラスメソッド。インスタンスがないので、その名前のインスタンスメソッドはありません。だから、あなたはあなたのコードがコンパイルされません、あなたは1あまりにも多くの `end`を持って

def self.validate_region_and_shape(region, shape) 
    raise ... 
関連する問題