Dlaczego to nie działa?Dlaczego nie działa "case" z "when> 2"?
case ARGV.length
when 0
abort "Error 1"
when > 2
abort "Error 2"
end
Dlaczego to nie działa?Dlaczego nie działa "case" z "when> 2"?
case ARGV.length
when 0
abort "Error 1"
when > 2
abort "Error 2"
end
if
oświadczenie prawdopodobnie byłby bardziej odpowiedni dla Twojego kodu, ponieważ nie masz ostateczne Zakres/wartość, ale raczej po prostu większe niż:
if ARGV.length == 0
abort "Error 1"
elsif ARGV.length > 2
abort "Error 2"
end
Cóż, to nie działa, ponieważ nie jest poprawna składnia ruby. Jednak można to zrobić:
x = 15
case x
when 0..9 then puts "good"
when 10..12 then puts "better"
when 13..200 then puts "best"
else
puts "either great or poor"
end
To nie jest poprawna składnia ruby.
Co trzeba to
case
when ARGV.length == 0
abort "Error 1"
when ARGV.length > 2
abort "Error 2"
end
Kiedy piszesz case x
, ważną część trzeba zrozumieć, że rubin bierze X, a następnie stosuje się porównanie do argumentu lub wyrażenia włożeniu w klauzuli when
.
Linia gdzie mówisz when x >2
czyta rubin jak:
if ARGV.length == > 2
Po usunięciu konkretnego obiektu ze sprawozdania case
można zastosować warunkowe terminie sprawozdania when
.
Ruby 1.8.7 + irb 0.9.5 raporty (irb): 4: błąd składniowy, nieoczekiwane ">" z oryginalnym zestawem instrukcji OP. Moja odpowiedź zawiera działający przepisany zestaw instrukcji. –
Próbowałem go w pliku .rb, to pokazuje błąd składni następnie. * & ^^% &^IRB. – Zabba
W tym miejscu irytujące jest to, że nie mogę znaleźć ostatecznej dokumentacji potwierdzającej moje twierdzenie. Po prostu wiem, * odpowiedź *. rubyspec.org i ruby-doc.org nie są pomocne. Specyfikacje składni języka, które mogę znaleźć, nie wydają się obejmować tego przypadku. –
Zastosowanie 1.0/0.0
dostać się do nieskończoności, który naprawia kod @ Mosch za:
case ARGV.length
when 0
raise "Too few"
when 3..(1.0/0.0)
raise "Too many"
end
Nie trzeba być Chuck Norris podzielić przez pływającym punktem zerowym.
Zamiast '(1.0/0.0)' możemy użyć 'Float :: INFINITY', który został dodany w rubin 1.9.3. –
Jak mogę poprawić mój konkretny kod? Dzięki. – emurad
Twoja jest jedyną odpowiedzią, która ma dla mnie sens - prawdziwie idiomatyczną i elegancką. Właśnie to wykorzystałem. –