說我有:紅寶石訪問對象的值
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
這是正確的嗎?
說我有:紅寶石訪問對象的值
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
這是正確的嗎?
我將如何訪問對象單元格的變量?
爲此,您需要查看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。
有幾件事情讓你學習:
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>
在上面的代碼中,變量x
變「生活」在def initialize
和end
之間。這是x
的範圍。如果您嘗試訪問該範圍之外的x
,您會得到一個NameError
,告訴您它沒有被定義。現在,如果你想要一個與物體一樣長的變量,你可以使用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
,即同時生成x
和x=
方法,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 –
只需將'return @ x'寫爲'@ x',這裏就不需要了* return *關鍵字。 –
是的......我知道'return'是可選的,但爲了清楚起見,在這個基本的例子中,我使用它:-) – Abdo
你能向我解釋一下attr_reader:x,:y確實好嗎? – user3307307
您的示例不起作用。你必須使用'attr_accessor'或'@'-variables。 – knut
@knut OP正在使用'x = cell1.x',這只是說他需要'getter',而不是'setter'。看到問題 - *我將如何能夠訪問對象單元格的變量?*。 –