Ruby on rails Ruby块范围
我有一个方法,我希望根据场景采取不同的行动,因此我希望能够将一个块传递给该方法,并在给出该块时执行 但是,我对我要传递的块中变量的范围感到困惑 例如:Ruby on rails Ruby块范围,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个方法,我希望根据场景采取不同的行动,因此我希望能够将一个块传递给该方法,并在给出该块时执行 但是,我对我要传递的块中变量的范围感到困惑 例如: def original_method (a, b, opt = {id: nil, id_map: {}}) element_id = (opt[:id_map]) yield if block_given? end 以及通过该块的新方法: def new_method(a, b, opt) original_method (a
def original_method (a, b, opt = {id: nil, id_map: {}})
element_id = (opt[:id_map])
yield if block_given?
end
以及通过该块的新方法:
def new_method(a, b, opt)
original_method (a, b, opt) do
if(element_id.include? "some text")
puts "it has some text"
end
end
end
但我得到了一个错误:
undefined local variable or method `element_id'
在屈服线
可以这样做吗?您需要传递局部变量
元素id
,作为产生的参数
def original_method (a, b, opt = {id: nil, id_map: {}})
element_id = opt[:id_map]
yield(element_id) if block_given? # pass it as argument
end
然后像这样接受它:
def new_method(a, b, opt)
original_method (a, b, opt) do | element_id | # receive as block pramater
if(element_id.include? "some text")
puts "it has some text"
end
end
end
element\u id
局部变量是在方法原始\u方法
中创建的,这就是为什么它只能在该方法中访问
在方法new\u method
内部,当调用方法original\u method
并附加块时,由于闭包功能,它可以访问方法new\u method
内部从开始到创建块的所有变量。回答间接问题:
块的作用域是词汇性的,这意味着它们可以从定义它们的作用域中访问变量(而不是“用于”)。在(opt[:id\u map]
之后缺少一个右括号