2012-08-24 6 views
12

To jest typowy wzorzec: jeśli zmienna nie istnieje, pojawia się błąd undefined local variable or method.Jak sprawdzić, czy istnieje zmienna o wartości bez "niezdefiniowanej zmiennej lokalnej lub metody"?

Istniejący kod ma if variable_name.present?, ale nie uwzględniono zmiennej nieistniejącej.

Jak mogę sprawdzić wartość zmiennej, a także wyjaśnić, że nie istnieje?

Próbowałem:

if (defined? mmm) then 
    if mmm.present? then 
    puts "true" 
    end 
end 

ale Ruby wciąż sprawdza, czy wewnętrznej mmm.present? i rzuca „nie taki zmienny”, gdy nie istnieje.

Jestem pewien, że istnieje wspólny wzór/rozwiązanie.

Odpowiedz

21

Zmiana present? do != '':

if defined?(mmm) && (mmm != '') then puts "yes" end 
+0

zwracać uwagę również operatorom preferencjami i odpowiednio użyć nawiasów, w tym przypadku druga część wypowiedzi zawiera nawias, ale jeśli sprawdzanie _boolean_ i nie używać nawiasów dla 'zdefiniowane? (Mmm) 'warunek zwróci' true'. Więc w ramach złożonego porównania dobrą praktyką jest używanie '(zdefiniowane? (Mmm))' – Asier

1

try:

if defined?(mm) && !mm.blank? 
    puts "acceptable variable" 
end 

To może upewnić się, że nie dostanie niezdefiniowanej zmiennej lub zerowa lub pusta wartość.

Możesz użyć tylko zdefiniowane? wykrycie skrótu z sesji wygasłej, w szczególności z hashiem głębokiego poziomu.

if defined?(session[:user]['name']) 
    puts "active session" 
else 
    puts "expired session" 
end 
+0

Nie będąc biegle w Rubim, ale 3 lata po zaakceptowanej odpowiedzi możesz podać informacje o tym, jak odnosi się ona do istniejącej odpowiedzi (s)? Tutaj proponuję wyjaśnić nieco ".nil?" Dodatek, który może być magią oszczędzającą "wtedy" i biorąc pod uwagę nieistnienie. Ale na pewno wiesz lepiej. Dzięki. – Dilettant

Powiązane problemy