Я борюсь с простым вопросом, как создать экземпляр класса с аргументами. Например у меня есть класс с инициализатора, который принимает два аргумента и метода класса:ruby: как инициализировать метод класса с параметрами?
class MyClass
attr_accessor :string_1, :string_2
def initialize(string_1, string_2)
@string_1 = string_1
@string_2 = string_2
end
def self.some_method
# do something
end
end
Если some_method были метод экземпляра я мог бы создать экземпляр нового объекта MyClass и вызовите метод как:
MyClass.new("foo", "bar").some_method
Но как я могу достичь этого для самого MyClass и метода класса вместо экземпляра?
Что-то вроде MyClass.self ("foo", "bar"). Some_method не работает.
Классы на самом деле не предназначены для хранения. Это работа экземпляра. Поэтому, если вы хотите, чтобы метод класса 'some_method' воздействовал на некоторые данные, обычной задачей было бы передать эти данные в качестве аргументов:' def self.some_method (string_1, string_2) '. Что вы пытаетесь достичь? Если вы контролируете класс, я бы советовал сделать метод some_method методом экземпляра. –
Спасибо за проработку, мне было любопытно, можно ли иметь аналог MyClass.new («foo», «bar»). Some_method на уровне класса. – StandardNerd
Я хотел бы подчеркнуть точку зрения МартинаСвалина. По моему опыту, включение состояний в классы (в отличие от * экземпляров * классов) обычно является очень плохой идеей. Вы делаете предположение, что каждый экземпляр будет соответствовать этому состоянию, и даже когда разумно думать об этом в то время, со временем все может измениться. Если инициализированные данные зависят от среды (например, ОС), тогда это нормально, но в противном случае я бы рекомендовал против нее. –