def Summer
@summer = true
puts "Your fruit are ripe for the picking."
if @tree_age == 1..5 && @tree_age > 0
@oranges = 5
elsif @tree_age == 6..15
@oranges = 20
else
@oranges = 50
end
end
Ich versuche sicherzustellen, dass ein Baum zwischen einem bestimmten Altersbereich x Orangen ergibt. Ich habe jedoch den folgenden Fehler, der sich auf meine elsif-Aussage bezieht:
Orange_tree.rb:14: warning: integer literal in conditional range
Ich habe auch versucht, eine Anweisung zu verwenden, die größer als && kleiner als bedingt ist. Kann jemand bitte erklären, was dieser Fehler bedeutet und wie ich zu meiner Lösung komme?
3 Antworten
Sie sollten include?
anstelle von {verwenden. {X1}}, um festzustellen, ob die angegebene Nummer innerhalb des Bereichs liegt:
def Summer
@summer = true
puts "Your fruit are ripe for the picking."
if (1..5).include?(@tree_age) && @tree_age > 0
@oranges = 5
elsif (6..15).include? @tree_age
@oranges = 20
else
@oranges = 50
end
end
==
:
Gibt nur dann true zurück, wenn obj ein Bereich ist, äquivalente Anfangs- und Endelemente hat (indem sie mit == verglichen werden) und dasselbe exclude_end hat? Einstellung als Bereich.
Was offensichtlich nicht der Fall ist.
Sie haben ein paar Probleme:
- Sie sollten Ihre Bereiche in Klammern setzen, wenn andere Operatoren oder Methoden in der Nähe sind. Ihr aktueller Fehler ist darauf zurückzuführen, dass Ruby
elsif @tree_age == 6..15
anders analysiert als erwartet - es wird als(1 == 6)..15
behandelt, undfalse..15
ergibt offensichtlich keinen Sinn. - Verwenden Sie
(1..5) === num
und nichtnum == (1..5)
, um zu testen, ob eine Zahl innerhalb eines Bereichs liegt.Range#===
ist zum Testen definiert dass dasRange
die rechte Seite enthält, während { {X4}} und {{X5} } beide testen nur, ob die rechte Seite numerisch äquivalent ist. - Sie müssen
@tree_age > 0
nicht testen. Sie testen bereits, ob es sich um1..5
handelt.
Sie können auch eine case
- Anweisung in Betracht ziehen, die etwas einfacher zu lesen ist. case
führt seine Vergleiche mit ===
durch.
@oranges = case @tree_age
when 1..5 then 5
when 6..15 then 20
else 50
end
Das Problem liegt in den Zeilen, in denen == mit einem Bereich steht.
if ( 10 == 1..11) # throws integer literal in conditional range warning
puts "true"
end
Wenn Sie dies stattdessen getan haben
if ( 10.between?(1, 11))
puts "true"
end
Verwandte Fragen
Neue Fragen
ruby
Ruby ist eine plattformübergreifende Open-Source-Sprache für dynamische objektorientierte Interpretationen. Das [ruby] -Tag steht für Fragen zur Ruby-Sprache, einschließlich ihrer Syntax und ihrer Bibliotheken. Ruby on Rails-Fragen sollten mit [Ruby-on-Rails] gekennzeichnet sein.