#ruby
#ruby
Вопрос:
У меня есть следующий метод:
class Store < ActiveRecord::Base
def my_func(str)
puts str
end
end
Кажется, я не могу вызвать это извне класса следующим образом:
Store::my_func("hi")
Есть идеи, почему?
Комментарии:
1. Это работает только для экземпляров:
Store.new.my_func("hi")
Ответ №1:
То, что вы определили, является методом экземпляра. В основном это означает, что вы можете вызывать его только в экземплярах этого класса.
store = Store.new
store.my_func("hi")
Если вам нужен метод класса, вам нужно определить его немного по-другому. Либо:
class Store < ActiveRecord::Base
def self.my_func(str)
puts str
end
end
Или (более полезно, если вы определяете много методов класса):
class Store < ActiveRecord::Base
class << self
def my_func(str)
puts str
end
end
end
Вышеупомянутые два работают, потому что классы также являются экземплярами класса Class
, поэтому неявным получателем self
в приведенных выше двух примерах является этот экземпляр (сам класс).
Вы вызываете метод класса, подобный этому:
Store.my_func("hi")