我想在一個正則表達式使用命名組,但它不工作:命名紅寶石正則表達式和組
module Parser
def fill(line, pattern)
if /\s#{pattern}\:\s*(\w+)\s*\;/ =~ line
puts Regexp.last_match[1]
#self.send("#{pattern}=", value)
end
if /\s#{pattern}\:\s*(?<value>\w+)\s*\;/ =~ line
puts value
#self.send("#{pattern}=", value)
end
end
end
正如你可以看到我第一次測試我的正則表達式,然後我嘗試使用相同的正則表達式與一個命名的組。
class Test
attr_accessor :name, :type, :visible
include Parser #add instance method (use extend if we need class method)
def initialize(name)
@name = name
@type = "image"
@visible = true
end
end
t = Test.new("toto")
s='desciption{ name: "toto.test"; type: RECT; mouse_events: 0;'
puts t.type
t.fill(s, "type")
puts t.type
當我執行這個,第一個正則表達式的工作,但不是第二個與指定的組。 這裏是輸出:
./ruby_mixin_test.rb
image
RECT
./ruby_mixin_test.rb:11:in `fill': undefined local variable or method `value' for
#<Test:0x00000001a572c8> (NameError)
from ./ruby_mixin_test.rb:34:in `<main>'
你的答案很無奈。你有一些消息來源嗎? – cedlemo
@cedlemo已經給出 –