Ruby Blocks внутри модуля или класса - PullRequest
0 голосов
/ 09 сентября 2018

Может ли блок на Ruby быть записан внутри класса или модуля? согласно документам блок может быть вызван из методов, использующих yield ... то есть он должен вызываться из методов в классах. Но для приведенного ниже кода, как я получаю следующую ошибку:

$ ruby ​​lesson1.rb Traceback (последний вызов был последним): 2: из lesson1.rb: 1: в <main>' 1: from lesson1.rb:2:in ' lesson1.rb: 9: в <class:Sample>': undefined method say_hi 'для M1 :: Образец: Класс (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 Ответ

0 голосов
/ 09 сентября 2018

Да, вы можете использовать блок в вызове метода на уровне класса / модуля. Причина, по которой вы получаете ошибку, не в блоке, а в том, что вы вызываете say_hi в контексте класса, поэтому он ищет методы самого класса, а не методы экземпляров класса. Вы определили say_hi как метод экземпляра, поэтому он недоступен на уровне класса. Если вы измените его на def self.say_hi( name ), он будет работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...