Ruby: 从外部将块作为参数传递 class
Ruby: passing blocks as parameters from oustide class
我在执行代码时出现以下错误:
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)
我的动机是用目标参数调用块。
我怎样才能在 class 之外通过一个街区。请帮忙。
嗯,问题来了:
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
的 each
方法并向其传递一个块。
这是你的代码:
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 并将其存储在一个变量中,或者使用each 的隐式块。
这是一个使用 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!" }
我在执行代码时出现以下错误:
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)
我的动机是用目标参数调用块。
我怎样才能在 class 之外通过一个街区。请帮忙。
嗯,问题来了:
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
的 each
方法并向其传递一个块。
这是你的代码:
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 并将其存储在一个变量中,或者使用each 的隐式块。 这是一个使用 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!" }