我注意到Ruby/Oniguruma中的副作用只出現在4個看似等價的語句中的1箇中。爲什麼變量day
定義在009
中,但不是在003
,005
或007
?= =操作符爲什麼只有時有副作用?
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:在所有四種情況下,這是相同的正則表達式和相同的字符串。
nb#2:我已經驗證了MS Windows和Ubuntu Linux中的行爲。
注意:雖然這不是這種情況,但在使用IRb中的局部變量時應該小心。由於在IRB中評估代碼的方式,它們在IRB中的行爲可能與腳本中的行爲略有不同。總是寫腳本來確認。 – 2011-05-25 15:25:59
好點,Jörg。 – 2011-05-25 16:26:11