我创建了以下简单的类:
class Test
def initialize(a, b)
@a = a
@b = b
end
def test
puts @a
end
end
Run Code Online (Sandbox Code Playgroud)
有没有办法来代替@a用self?每当我尝试这样做时,我收到一个错误:
undefined method `a'
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是因为我想用两个参数创建一个新对象,然后对这些参数进行操作,如:
d = MyObject('title', 'Author')
d.showAuthor
Run Code Online (Sandbox Code Playgroud)
class Test
attr_accessor :a,:b #creates methods a,b,a=,b= and @a and @b variables
def initialize(a, b)
self.a = a #calls a=
self.b = b #calls b=
end
def test
puts a #calls method a; self.a would do the same.
end
def self.[](a,b)
new(a,b)
end
end
Run Code Online (Sandbox Code Playgroud)
这将让你放弃新的(但你必须将parens更改为方括号)所以你可以调用:
d=Test['dog','cat']
d.a #'dog'
Run Code Online (Sandbox Code Playgroud)