2011-10-18 14 views

Odpowiedz

43
<% if defined?(:dashboard_pane_counter) && dashboard_pane_counter.remainder(3) == 0 %> 
    # do_something here, this assumes that dashboard_pane_counter is defined, but not nil 
<% end %> 
+10

Symbol nie działa dla mnie. więc musiałem sprawdzić w ten sposób 'jeśli zdefiniowano? (variable_name)' – HungryCoder

+0

dzięki .. czasami najprostsza odpowiedź jest prawidłowa :) – baash05

5

Przy zastosowaniu szyny i zmienne instancji, nil ma try metody zdefiniowane, więc można zrobić:

<% if @dashboard_pane_counter.try(:remainder(3)) == 0 %> 
    #do something 
<% end %> 

więc jeśli zmienna instancji nie jest zdefiniowana, try(:anything) zwróci nil i dlatego ocenia się fałszywy. I nil == 0 jest fałszywa

+1

To nadal będzie powodować błąd, jeśli zmienna nie została zdefiniowana, więc nie odpowiada pytanie. – michaeltwofish

+0

No to nie będzie, szyny został 'zbudowany w magiczny': '1.9.3p392: 005> @hh => nil 1.9.3p392: 006> @ hh.try (: cokolwiek) => nil' – Yule

+0

Więc na przykład zmienne, zero ma metodę "spróbuj" – Yule

-2

Insted z

if !var.nil? 

użyłbym

unless var.nil? 

Thats dużo lepszy kod rubinowy!

+3

dotyczy to tylko sytuacji, gdy zmienna została zdefiniowana wcześniej niż ten kod. Spróbuj, jeśli! Adallajglaksdkfaj.nil? w pierwszym wierszu "funkcji". kablammo :) – baash05

Powiązane problemy