我有以下动态创建的类,它被传递到nokogiri的xpath函数中:
country = nil
ret = parent.xpath(".//text()[regex(.)]", Class.new{
def regex(node_set, lead)
result = node_set.find_all do |node|
node.text =~ POST_CODE_EXPRESSION || node.text =~ ZIP_CODE_EXPRESSION
end
result
end
}.new)
我想以某种方式访问或设置国家/地区变量或从正则表达式函数中访问外部自我。
无论如何,我可以将外部自我传递给Class.new表达式,还是有人可以提出更好的方法?
答案 0 :(得分:4)
方法不能是Ruby中的闭包,只有块可以:
country = nil
ret = parent.xpath(".//text()[regex(.)]", Class.new{
define_method(:regex) do |node_set, lead|
result = node_set.find_all do |node|
node.text =~ POST_CODE_EXPRESSION || node.text =~ ZIP_CODE_EXPRESSION
end
result
end
}.new)
顺便说一下:你的regex
方法比它需要的要复杂得多。它只相当于
define_method(:regex) do |node_set, lead|
node_set.find_all do |node|
node.text =~ POST_CODE_EXPRESSION || node.text =~ ZIP_CODE_EXPRESSION
end
end
答案 1 :(得分:1)
你可以这样做:
x = 1
Class.new do
def initialize(binding)
eval 'x += 1', binding
end
end.new binding
p x # will print 2
使用eval看起来不太好但是它可以工作=)