私は引数を使ってクラスをインスタンス化する簡単な質問に苦労しています。例えば 私は2つの引数とクラスメソッドを取るイニシャライザを持つクラスを持っている: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")の対応が可能かどうか不思議でした。 – StandardNerd
@ MartinSvalinのポイントを強調したいと思います。私の経験上、(クラスの*インスタンス*とは対照的に)クラスに状態を入れることは、通常、非常に悪い考えです。すべての単一のインスタンスがその状態に準拠することを前提としており、その時に考えるのが妥当であっても、時間の経過とともに変化する可能性があります。初期化されたデータが環境(OSなど)に依存している場合は問題ありませんが、それ以外の場合は推奨しています。 –