Ruby访问对象的值

时间:2014-02-16 23:10:37

标签: ruby class variables

说我有:

class Cell 
  def initialize(x_var, y_var)
    x = x_var
    y = y_var
  end
end

我如何能够访问对象单元格的变量?

cell1 = Cell.new(0, 0)

x = cell1.x
y = cell1.y

这是对的吗?

2 个答案:

答案 0 :(得分:4)

您需要了解一些事项:

1-变量范围

class Cell 
  def initialize(x_var, y_var)
    x = x_var
    y = y_var
  end

  def print_x
    puts x
  end
end

Cell.new(1,1).print_x

您将获得以下内容:

NameError: undefined local variable or method `x' for #<Cell:0x007ff901d9f448>

在上面的代码中,变量xdef initializeend之间获得“生命”。这是x的范围。如果您尝试访问该范围之外的x,则会收到NameError告知您未定义的内容。

2-现在,如果你想要一个与对象一样长的变量,你可以使用instance variables。实例变量以@开头,只要对象有效,就会生效。

class Cell
  def initialize(x_var, y_var)
    @x = x_var
    @y = y_var
  end

  def x
    return @x
  end

  def x=(val)
    @x = val
  end

  def y
    return @y
  end

  def y=(val)
    @y = val
  end
end

c = Cell.new(1,2)
puts c.x

给出以下内容:

1
=> nil

3-您必须在上面的示例中编写太多代码才能实现很少。这是@ aruprakshit的attr_reader方便的地方:

attr_reader :x生成方法:

def x
  return @x
end

4-如果您想读写@x,即同时生成xx=方法,attr_accessor会为您执行此操作:

class Cell
  attr_accessor :x, :y

  def initialize(x_var, y_var)
    @x = x_var
    @y = y_var
  end
end

c = Cell.new(1,2)
puts c.x
c.x = 3
puts c.x

给出以下内容:

1
=> nil
=> 3
3
=> nil

答案 1 :(得分:2)

  

我如何能够访问对象单元格的变量?

您需要为此目的调查attr_reader

class Cell 
  attr_reader :x,:y
  def initialize(x_var, y_var)
    @x = x_var
    @y = y_var
  end
end
cell1 = Cell.new(0, 0)

cell1.x # => 0
cell1.y # => 0

请阅读此Why use Ruby's attr_accessor, attr_reader and attr_writer?以了解 attr_reader