W bloku IF muszę sprawdzić, czy jakiś warunek jest prawdziwy, a jeśli tak, wyjść z bloku.Ruby - wyjście z bloku IF
#something like this
if 1 == 1
return if some_object && some_object.property
puts 'hello'
end
Jak mogę to zrobić?
W bloku IF muszę sprawdzić, czy jakiś warunek jest prawdziwy, a jeśli tak, wyjść z bloku.Ruby - wyjście z bloku IF
#something like this
if 1 == 1
return if some_object && some_object.property
puts 'hello'
end
Jak mogę to zrobić?
nie można złamać z tego if
. Co można zrobić, to dodać Subklauzuli do niego:
if (cond1)
unless (cond2)
# ...
end
end
Jeśli masz problemy z logiką zbyt zagnieżdżona i trzeba sposób spłaszczyć go lepiej, może to, co chcesz zrobić, to obliczyć zmienną przed ręką, a potem tylko zanurzyć się, jeśli chcesz:
will_do_stuff = cond1
will_do_stuff &&= !(some_object && some_object.property)
if (will_do_stuff)
# ...
end
Istnieje wiele sposobów, aby uniknąć konieczności głęboko zagnieżdżone struktury bez konieczności break
go.
Należy zachować ostrożność przy wybieraniu słów, które kojarzą się z rzeczami. Ponieważ Ruby ma bloki, nie jestem pewien, czy masz wrażenie, że instrukcja warunkowa jest blokiem. Nie można, na przykład, wykonaj następujące czynności:
# will NOT work:
block = Proc.new { puts "Hello, world." }
if true then block
Jeśli trzeba mieć zagnieżdżony warunkowe, można zrobić tylko, że bez komplikowania rzeczy istnieją:
if condition_one?
if condition_two?
# do some stuff
end
else
# do something else
end
To jest trochę mylące, ponieważ jeśli zmieniłeś drugi wiersz tego pierwszego fragmentu na "jeśli jest prawdziwy, a potem blokował.", To zadziałałoby – DaveMongoose
@DaveMongoose To dlatego, że nazywasz metodę "zadzwoń" na Proc instancji, ale dzięki za downward – coreyward
jest tam przeciwny przykład czegoś w ruby, który jest blokiem, ale może być podstawiony dla instancji proc (jak 'blok')? Myślę, że składnia wymaga, aby był on '& block', jeśli używasz go zamiast bloku jawnego. – DaveMongoose
+1 do wcześniejszego obliczenia zmiennej, która nadaje nazwę warunkowi. Dobre imię znacznie poprawi czytelność. –
Zalecam unikanie tego i definiowanie więcej metod, jeśli trzeba. Jest to wzorzec, z którego korzysta Rails i działa bardzo dobrze. Podziel metody na najbardziej atomową rzecz, z którą możesz żyć - w tym przypadku inna metoda (prywatna?) W tej samej klasie/obiekcie może być użyta do przetestowania tego warunku. Na przykład. 'def will_parse? (obj); ! obj.nil? && obj.respond_to? (: parsować) && obj.is_ready_and_willing ?; end' – coreyward
Co to jest "&& ="? –