vik*_*027 2 ruby virtual attributes
我正在阅读一篇ruby教程并尝试使用了解虚拟属性的方式.这是教程中显示的示例.
class Spaceship
def destination
@autopilot.destination
end
def destination=(new_destination)
@autopilot.destination = new_destination
end
end
ship = Spaceship.new
ship.destination = "Earth"
puts ship.destination
Run Code Online (Sandbox Code Playgroud)
根据教程,这段代码应该理想地返回地球,但我遇到了以下错误.
class.rb:7:in `destination=': undefined method `destination=' for nil:NilClass (NoMethodError) from class.rb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)
对不起,但无法确定缺失的部分.
你需要为@autopilot变量分配一些东西.
这样的事情应该有效:
class Spaceship
def initialize
@autopilot = Struct.new(:destination).new(nil)
end
def destination
@autopilot.destination
end
def destination=(new_destination)
@autopilot.destination = new_destination
end
end
Run Code Online (Sandbox Code Playgroud)
但是如果要添加虚拟属性,请将值保存为简单的实例变量,如下所示:
class Spaceship
def destination
@destination
end
def destination=(new_destination)
@destination = new_destination
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1141 次 |
| 最近记录: |