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