gpt4 book ai didi

ruby - 从 block 中设置实例变量

转载 作者:数据小太阳 更新时间:2023-10-29 07:25:19 24 4
gpt4 key购买 nike

我如何实现如下所示,以便当我在 block 中设置 s 变量时,它还会在我的 Topic 类中设置 @subject 实例变量?

class Topic
def subject(&blk)
blk.call(@subject) if block_given?
@subject unless block_given?
end
end

my_topic = Topic.new

p my_topic.subject #=> nil

my_topic.subject do |s|
s = ['one', 'two', 'three']
s.pop
p s #=> ['one', 'two']
end

p my_topic.subject #=> nil... want it to be ['one, 'two']

最佳答案

你不能按照你想要的方式去做。 block 参数引用与实例变量相同的对象,但它们是完全不同的变量,设置一个永远不会设置另一个。有两种选择:

  1. 将变量设置为 block 的结果,所以它会像:

    class Topic
    def subject
    @subject = yield if block_given?
    @subject unless block_given?
    end
    end

    在 block 内:

    my_topic.subject do
    s = ['one', 'two', 'three']
    s.pop
    p s #=> ['one', 'two']
    s
    end
  2. subject 方法 instance_eval block ,以便 block 可以显式设置实例变量

关于ruby - 从 block 中设置实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3048509/

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