iki hat çalışmaz. Ve her iki çizgi de çalışır. Bu schrödinger ifadesidir :).
Yeni repl içinde iki kez çalıştırabilirsiniz: Yeni bir yenisi ile değiştirilmesini öngörmektedir açın
a = b if b = "test"
#=> NameError: undefined local variable or method `b' for main:Object
a = b if b = "test"
#=> "test"
en derin bakalım:
defined(b)
#=> nil
a = b if b = "test"
#=> NameError: undefined local variable or method `b' for main:Object
defined(b)
#=> local-variable
b
#=> "test"
a = b if b = "test"
#=> "test"
Yani aslında Yakut değerlendirmiş b = "test"
kısım ve akım içinde bu değişkeni tanımlanmış kapsamı. Her iki ifade de a = b
ve if b = "test"
uygulanmıştır. İlk defa değerlendirildiğinde
c = p("assignment") && b if b = p("if") && "test"
#=> "if"
#=> "assignment"
#=> NameError: undefined local variable or method `b' for main:Object
Ama b
değişken atama deyimi kapsamında tanımlanan edilmedi: deyim atama deyimi önce yürütüldüğünde, bunun ötesinde. Ve ikinci yaklaşımda zaten tanımlanmıştı, bu yüzden doğru sonuç aldınız.
Yani, bu şekilde
(sadece olması gerektiği gibi) Ruby 2.3 bu işin ne de atamaları yapma. –
Devon, her iki satır için [komut dizileri] 'ni (http://ruby-doc.org/core-2.2.2/RubyVM/InstructionSequence.html) inceleyebilir ve farkı kendiniz bulabilirsiniz. Kişisel olarak rahatsız olmazdım, çünkü bu kod asla kullanılmamalı ve en son yakutta yeniden üretilmiyor. –
Yeniden üretilemez. – sawa