Ruby Blocks внутри модуля или класса
Можно ли написать блок в Ruby внутри класса или модуля? согласно документам блок может быть вызван из методов, использующих yield... то есть он должен вызываться также из методов в классах. Но для приведенного ниже кода, как я получаю следующую ошибку:
$ ruby lesson1.rb Traceback (последний вызов был последним): 2: from lesson1.rb: 1: in
<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
1 ответ
Да, вы можете использовать блок в вызове метода на уровне класса / модуля. Причина, по которой вы получаете ошибку, не из-за блока, а потому, что вы звоните say_hi
в контексте класса, поэтому он ищет методы самого класса, а не методы экземпляров класса. Вы определили say_hi
как метод экземпляра, поэтому он недоступен на уровне класса. Если вы измените его на def self.say_hi( name )
работает нормально.