我正在努力解决一个简单的问题如何用参数实例化一个类。 例如,我有一个带有初始化器的类,它带有两个参数和一个类方法:
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不起作用。
答案 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"