gpt4 book ai didi

ruby - 将实例变量保存在 Ruby 的 block 中

转载 作者:数据小太阳 更新时间:2023-10-29 08:32:05 27 4
gpt4 key购买 nike

当我调用 lambda @description 时,我看不到实例变量 @model 的值。这可能吗?我只看到“非常好”。当我调用 show_description 时。提前致谢。

class Car
def initialize(model)
@model = model
end

def description
@description = lambda{yield}
end

def show_description
@description.call
end
end

c = Car.new("Ford")
c.description{"#{@model} is very good."}
puts c.show_description # => " is very good."

最佳答案

c.description{"#{@model} is very good."} 不会告诉你你想要什么。重点是,您传递的 block 可以访问外部范围,其中未找到变量 @model,因此 @modelnil。它被称为封装,因此,外界无法直接知道/访问对象的状态,在您的情况下,对象是c。此处对象的状态 表示实例变量的值位于对象c 中。但是使用方法,您可以读取/更新对象的状态。

c.description{"#{c.model} is very good."}那样做。

您的代码可以重写为:

class Car
attr_reader :model

def initialize(model)
@model = model
end

def description
@description = yield
end

def show_description
@description
end
end

c = Car.new("Ford")
c.description{"#{c.model} is very good."}
puts c.show_description
# >> Ford is very good.

关于ruby - 将实例变量保存在 Ruby 的 block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22971192/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com