Во-первых, модуль не имеет ничего общего с производительностью. Его основное использование - организация кода (пространства имен) и миксины.
Помещение классов в модуль - это то, что я делал раньше, но я не пробовал это наоборот. Но это полностью верно.
Во втором примере вы просто поместили модуль внутри класса и ожидали, что Ruby включит модуль в родительский объект. Но это не может быть сделано. Вы должны сделать это вручную. Просто добавьте include в конце строки:
class Hello
module Tsito
def say_hello(name)
puts "Class > Module: Hello #{name}"
end
end
include Tsito
end
Теперь попробуйте
Hello.new.say_hello "hola"
Это будет работать так, как вы ожидали.
Помните, что вам нужно использовать include
везде, где вы хотите использовать модуль.