Якщо у вас є доступ до методу делегата, ви можете зробити це:
[20] pry(main)> class Foo
[20] pry(main)* def self.bar
[20] pry(main)* "foo bar"
[20] pry(main)* end
[20] pry(main)* delegate :bar, to: 'self.class'
[20] pry(main)* end
=> [:bar]
[21] pry(main)> Foo.new.bar
=> "foo bar"
[22] pry(main)> Foo.bar
=> "foo bar"
Крім того, і, ймовірно, чистіше, якщо у вас є більше методу або двох, які ви хочете делегувати класу і екземпляру:
[1] pry(main)> class Foo
[1] pry(main)* module AvailableToClassAndInstance
[1] pry(main)* def bar
[1] pry(main)* "foo bar"
[1] pry(main)* end
[1] pry(main)* end
[1] pry(main)* include AvailableToClassAndInstance
[1] pry(main)* extend AvailableToClassAndInstance
[1] pry(main)* end
=> Foo
[2] pry(main)> Foo.new.bar
=> "foo bar"
[3] pry(main)> Foo.bar
=> "foo bar"
Слово обережності:
Не просто випадковим чином delegate
все, що не змінює стан до класу та екземпляра, тому що ви почнете стикатися з проблемами зіткнення дивних імен. Робіть це скромно і лише після того, як ви перевірили, нічого іншого не збито.