Ruby/Oniguruma'da sadece 4 göründükte eşdeğer ifadelerden sadece birinde mevcut bir yan etki fark ettim. 009
'da tanımlanmış olan ancak 003
, 005
veya veya 007
değişkenleri neden?Neden = ~ operatörünün bazen yan etkileri oluyor?
irb(main):001:0> r = /(?<day>\d\d):(?<mon>\d\d)/
=> /(?<day>\d\d):(?<mon>\d\d)/
irb(main):002:0> r =~ "24:12"
=> 0
irb(main):003:0> day
NameError: undefined local variable or method `day'
irb(main):004:0> "24:12" =~ r
=> 0
irb(main):005:0> day
NameError: undefined local variable or method `day'
irb(main):006:0> "24:12" =~ /(?<day>\d\d):(?<mon>\d\d)/
=> 0
irb(main):007:0> day
NameError: undefined local variable or method `day'
irb(main):008:0> /(?<day>\d\d):(?<mon>\d\d)/ =~ "24:12"
=> 0
irb(main):009:0> day
=> "24"
nb # 1: Her dört durumda aynı regex ve aynı dize.
nb # 2: MS Windows ve Ubuntu Linux'taki davranışı doğruladım.
Not: Buradaki durum bu olmamasına rağmen, IRb'de yerel değişkenlerle çalışırken dikkatli olmalısınız. IRb'de kodun, IRb'de değerlendirilme biçiminden dolayı biraz daha farklı davranabilirler. Her zaman onaylamak için komut dosyaları yazın. –
İyi nokta, Jörg. –