ruby:如何用参数初始化类方法?

时间:2016-05-01 18:34:45

标签: 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不起作用。

2 个答案:

答案 0 :(得分:2)

你可以这样做。

class MyClass
  singleton_class.send(:attr_accessor, :string_3)
end

MyClass.string_3 = "It's a fine day."
MyClass.string_3 #=> "It's a fine day."

@string_3是一个类实例变量。

答案 1 :(得分:0)

我认为启动类然后对这些值运行方法的传统方法如下:

class MyClass
  def initialize(string_1, string_2)
    @string_1 = string_1
    @string_2 = string_2
  end

  def some_method
    "#{@string_1} #{@string_2}"
  end
end

a = MyClass.new("foo", "bar")
puts a.some_method #=> "foo bar"

如果你想使用attr_accessor,你可以绕过some_method来返回这些值:

class MyClass 
  attr_accessor :string_1, :string_2
  def initialize(string_1, string_2)
    @string_1 = string_1
    @string_2 = string_2
  end
end

a = MyClass.new("foo", "bar")
puts a.string_1 + a.string_2 #=> "foobar"