Ruby构造函数self vs @

mes*_*600 0 ruby

我创建了以下简单的类:

class Test
  def initialize(a, b)
    @a = a
    @b = b
  end

  def test
    puts @a
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有办法来代替@aself?每当我尝试这样做时,我收到一个错误:

undefined method `a'
Run Code Online (Sandbox Code Playgroud)

我这样做的原因是因为我想用两个参数创建一个新对象,然后对这些参数进行操作,如:

d = MyObject('title', 'Author')
d.showAuthor
Run Code Online (Sandbox Code Playgroud)

Sha*_*cci 5

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)