Is there a way for me to simultaneously create a class and an instance method in a ruby class that have the same name? I have a version of this created in the class Foo
class Foo
def self.bar
"hello world"
end
def bar
self.class.bar
end
end
While this works, is there a more elegant way of achieving this? Right now, I would have to duplicate ~10 methods as instance and class methods.
you can use Ruby's Forwardable
like this:
# in foo.rb
class Foo
extend Forwardable
def_delegators :Foo, :bar, :baz, :qux
def self.bar
"hello bar"
end
end
then
> Foo.bar #=> "hello bar"
> Foo.new.bar #=> "hello bar"
You can also use method_missing
like this:
class Foo
DelegatedMethods = %i[bar baz qux]
def method_missing(method)
if DelegatedMethods.include? method
self.class.send method
else
super
end
end
def self.bar
"a man walked into a bar"
end
end
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.