Как реализовать модуль в классе в Ruby? - PullRequest
0 голосов
/ 17 июня 2011

Я хочу внедрить модуль в структуру класса.

Я делаю это с простой логикой (может быть, вы предлагаете свои идеи для лучшей производительности):

module Tsito
  class Hello
    def say_hello(name)
      puts "Module > Class: Hello #{name}"
    end
  end
end
tsio = Tsito::Hello.new
tsio.say_hello("Sara")

Но я мог бы это. Какие у тебя идеи?

class Hello
  module Tsito
    def say_hello(name)
      puts "Class > Module: Hello #{name}"
    end
  end
end
tsio = Hello.new
#tsio.say_hello("Sara") // Gives an error

1 Ответ

2 голосов
/ 17 июня 2011

Во-первых, модуль не имеет ничего общего с производительностью. Его основное использование - организация кода (пространства имен) и миксины.

Помещение классов в модуль - это то, что я делал раньше, но я не пробовал это наоборот. Но это полностью верно.

Во втором примере вы просто поместили модуль внутри класса и ожидали, что 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 везде, где вы хотите использовать модуль.

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