我在 a 的 replace 参数中使用 lambda gsub!
。当 lambda 在不同的方法中定义Regexp.last_match
或$~
为空时,与 lambda 在调用时评估表达式的预期行为背道而驰。如果我运行这段代码,我会得到一个错误,但如果我取消注释转录中的第一行,它就会工作。
class Test
def initialize
@@replace = lambda { "#{callback('*', Regexp.last_match)}" }
end
def transcribe(s)
#@@replace = lambda { "#{callback('*', Regexp.last_match)}" }
s.gsub!( /(?<l>.?)[aeiou](?<r>.?)/ ) do
$~[:l] + (@@replace).call + $~[:r]
end
s
end
def callback( replace, match )
raise "Error: Match is empty" if match.nil?
return replace.upcase
end
end
t = Test.new
puts t.transcribe('example')
谁能告诉我我做错了什么,或者这是一个错误?
我用谷歌搜索了它:ruby Regexp.last_match lambda,在不同的情况下似乎有一个错误$1
,但我不明白它是否与这个有关。