执行代码时出现以下错误:
example.rb:9:in `<main>': undefined method `each' for main:Object (NoMethodError)
第9行是我代码中的倒数第二行。
我的代码:
class TargetProvider
def each(target,&block)
block.call(target)
end
end
tp = TargetProvider.new
each { puts "Hello!" }
tp.each(1, each)
我的动机是用目标参数调用块。
如何在课外传递一个块。请帮忙。
答案 0 :(得分:1)
这是你的代码:
class TargetProvider
def each(target,&block)
block.call(target)
end
end
tp = TargetProvider.new
each { puts "Hello!" } # this line is trying to run a method called each
tp.each(1, each)
您需要定义lambda或proc并将其存储在变量中,或使用每个变量的隐式块。 这是一个使用lambda的例子:
class TargetProvider
def each(target,&block)
block.call(target)
end
end
tp = TargetProvider.new
each_block = lambda { |a| puts "Hello!" }
tp.each(1, &each_block)
以下是使用隐式块的示例:
class TargetProvider
def each(target,&block)
block.call(target)
end
end
tp = TargetProvider.new
each_block = lambda { |a| puts "Hello!" }
tp.each(1) { puts "Hello!" }
答案 1 :(得分:0)
嗯,问题出在这里:
tp = TargetProvider.new
each { puts "Hello!" } # Here
tp.each(1, each)
在这里,你是调用 each
方法,而不是声明一个新变量。
在Ruby中,如果您在未指定其对象的情况下调用方法(通过object.method
),则解释器会在MainObject
中搜索该方法。
很明显,其中没有这样的方法,因此错误是什么。
您可能希望实现的目标如下:
tp = TargetProvider.new
tp.each(1) { puts "Hello!" }
该代码调用TargetProvider
&#39;} each
方法将其传递给一个块。