Задать вопрос
beerdy
@beerdy
https://vk.com/beerdy

Как в Ruby сделать метод общедоступным?

Есть код:
# encoding: UTF-8
module SharedMethods
  def meth1
    puts 'meth1'
  end
  def meth2
    puts 'meth2'
  end
end

class SlaveClass
  def blabla
    meth2
  end
end

module MasterModule
  
  def do_some
    SlaveClass.new().blabla
  end
end

Как сделать чтобы методы meth1 и meth2 были доступны везде?
  • Вопрос задан
  • 239 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Dem1
@Dem1 Куратор тега Ruby on Rails
Ruby on Rails developer
Если вы хотите, чтобы методы были доступны везде, придется расширять Object, я бы делал через refinements, использовал бы using только в тех местах, где тебе нужны эти методы

Пример:

module SuperString
  refine Object do
    def ii
      puts "ii"
    end
  end
end

using SuperString
5.ii
"r".ii
ii
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
HighQuality
@HighQuality
☁ Ниндзя девелопер
Чтобы в `SlaveClass` были доступны модуля `SharedMethods` его нужно подключить.

class SlaveClass
	include SharedMethods
	def blabla
		meth2
	end
end


Теперь, чтобы вызвать метод модуля можно поступить следующим образом:

module MasterModule
	def self.do_some
		SlaveClass.new.blabla
	end
end


И вызывать метод модуля

MasterModule.do_some

------ UPD
Чуток плохого кода. Это тоже работает, но я бы не стал это использовать в боевых решениях :)

module SharedMethods
	def meth1
		puts 'meth1'
	end
	def meth2
		puts 'meth2'
	end
end

class Object
	include SharedMethods
end

#

class SlaveClass
	def blabla
		meth2
		meth1
	end
end

module MasterModule
	def self.do_some
		SlaveClass.new.blabla
	end
end

MasterModule.do_some
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы