可以在类或模块内部编写Ruby中的块吗?根据文档,可以使用yield的方法调用一个块...即应该也可以从类中的方法调用。但是对于下面的代码,我得到以下错误:
$ ruby lesson1.rb 追溯(最近一次通话): 2:从lesson1.rb:1:在
<main>' 1: from lesson1.rb:2:in
'中开始 lesson1.rb:9:in<class:Sample>': undefined method
say_hi'中的M1 :: Sample:Class(NoMethodError)
文件名:lessson1.rb
module M1
class Sample
def say_hi( name )
puts "Hello, #{name}! Entered the method"
yield
puts "Exiting the method"
end
say_hi("Block") do
puts "Good Day"
end
end
end
答案 0 :(得分:2)
是的,您可以在类/模块级别的方法调用中使用块。出现错误的原因不是因为块,而是因为您是在类的上下文中调用say_hi
,所以它在查找类本身的方法,而不是在查找类实例的方法。类。您将say_hi
定义为实例方法,因此在类级别上不可用。如果将其更改为def self.say_hi( name )
,它将正常工作。