Frage Kann das Schlüsselwort "außer" in Ruby nicht verstehen


Ich bin kein englischer Muttersprachler. Ich weiß, es klingt trotzdem dumm. Ich schreibe in Python & C. Aber ich kann nicht ganz verstehen, wie unless funktioniert.

Ist es gesund, von einem logischen Standpunkt aus daran zu denken? ZB bedenken Sie die if Stichwort: if condition. Ob condition ist wahr, der Code läuft. Was ist die logische Erklärung dafür? unless?

Gibt es eine andere Möglichkeit, darüber nachzudenken?


7
2017-11-06 05:36


Ursprung


Antworten:


Ruby außer Modifikator:

Syntax: Code, sofern nicht bedingt

Führt Code aus, wenn die Bedingung falsch ist.

Beispiel:

$var =  1
print "1 -- Value is set\n" if $var
print "2 -- Value is set\n" unless $var

$var = false
print "3 -- Value is set\n" unless $var

Dies wird folgendes Ergebnis erzeugen:

1 - Wert ist eingestellt

3 - Wert ist eingestellt


7
2017-11-06 05:39



unless x ist äquivalent zu if !x


24
2017-11-06 05:51



Der einfachste Weg ist: unless ist ein Gegenteil von if. Es funktioniert an den gleichen Orten (denke ich) wie if:

foo = nil
puts "This will not show" if foo
puts "But this will" unless foo

if foo then
  puts "This will not show"
end
unless foo
  puts "But this will"
end

Es sieht im Code besser aus, wenn Sie schreiben unless foo Anstatt von if !foo - Aber das ist nur meine Meinung. In der längeren Form können Sie sogar verwenden else, aber bitte nicht.

Hier ist ein eine Reihe von Regeln, um den Code lesbarer zu machen.


8
2017-11-06 05:45



hungrig = wahr

wenn nicht hungrig

puts "Ich schreibe Ruby-Programme!"

sonst

setzt "Zeit zu essen!"

Ende

Dies ist der einfache Weg zu verstehen


0
2018-06-26 07:55



Hier ist ein weiterer Hinweis, mit dem ich glücklich bin unless in Rubin:

Erstens, in Situationen, in denen ich erwarte, dass die Bedingung falsch ist und der Code normalerweise ausgeführt wird, verwende ich unless:

unless name.empty?
  puts "Hello #{name}"
end

Zweitens, wann immer ich die Bedingung erwarte, und der Code wird normalerweise nicht laufen, benutze ich if not:

if not name == 'Awesome_Coder'
  message.puts "Unauthorized!"
end

-1
2018-05-16 15:08