2017-07-21 3 views
0

私は犬をチェックしてワクチン接種されているかどうかを調べる私のクラスDogでcheck_dogメソッドを作成しました。もしどちらかが真であればブール評価

しかし、私はあなたが私はこの行は「ゼロ」が得られているように支援が必要な行をインデントしている以下を参照することができ、この声明のは難しい論理式を考えてIf the dog is only vaccinated or only wormed, the dog can only be accepted by itself.

を見つけています。

class Dog 
    attr_accessor :name, :age, :breed, :vaccinated, :wormed 

    def initialize(name, age, breed, vaccinated, wormed) 
    @name = name 
    @age = age 
    @breed = breed 
    @vaccinated = vaccinated 
    @wormed = wormed 
    end 

    def check_dog 
    if @vaccinated && @wormed == true 
    puts "#{@name} can be accepted" 
    ----> elsif @vaccinated || @wormed == true 
    puts "#{@name} can only be accepted by itself" 
    else 
    puts "#{@name} cannot be accepted" 
    end 
    end 

end 

spot = Dog.new("Spot", 5, "Labrador", true, false) 
spot.check_dog # Should return: "Spot can only be accepted by itself". 
+0

何らかの理由でコードワーにNILを返していますが、irbでは正しい文字列を返しています。 – Benjamints

答えて

1

あなたはそれが書かれている方法は、右を見ていない...それはおそらく次のようになります。自分のスタイルを使用して:単純にそれを維持するには

def check_dog 
    if @vaccinated == true && @wormed == true 
    puts "#{@name} can be accepted" 
    elsif @vaccinated == true || @wormed == true 
    puts "#{@name} can only be accepted by itself" 
    else 
    puts "#{@name} cannot be accepted" 
    end 
end 

あなたはこの

def check_dog 
    if @vaccinated && @wormed # both are truthy 
    puts "#{@name} can be accepted" 
    elsif @vaccinated || @wormed # one or the other are truthy 
    puts "#{@name} can only be accepted by itself" 
    else # falsey 
    puts "#{@name} cannot be accepted" 
    end 
end 
を行うことができます

また、このメソッドは実際にはnilを返しています。何も返さず、stdoutに出力しています...これをコードに変更してみてください:

def check_dog 
    if @vaccinated && @wormed # both are truthy 
    "#{@name} can be accepted" 
    elsif @vaccinated || @wormed # one or the other are truthy 
    "#{@name} can only be accepted by itself" 
    else # falsey 
    "#{@name} cannot be accepted" 
    end 
end 
+0

私は本当に答えに感謝します。しかし、それはまだ 'nil'を返すと私はテストを通過していない。私はテストがバグかもしれないと思う。 – Benjamints

+0

@Benjamintsは答えの更新を参照してください...何も返されていません... – ptierno

+0

ありがとうございます。素晴らしい答え。 – Benjamints

2
def check_dog 
    case [@vaccinated, @wormed] 
    when [true, true] then "#{@name} can be accepted" 
    when [false, false] then "#{@name} cannot be accepted" 
    else "#{@name} can only be accepted by itself" 
    end.tap(&method(:puts)) 
end 

このように、それの両方のプリントとresultを返します。

関連する問題