【发布时间】:2026-01-31 22:25:01
【问题描述】:
我已经为此奋斗了两个小时,但无法解决。想象一下我有这个课程:
class SimpleExpression
attr_writer :value
def initialize(value)
@value = value
end
def evaluate
@value
end
然后我想像这样实例化它:
exp1 = SimpleExpression.new(true)
exp3 = exp1.not
p exp3.evaluate # This should give me false
exp1.value = false
p exp3.evaluate # This should give me true now
我真的不知道如何在 exp3 上维护 exp1 的引用,我尝试在 SimpleExpression 上创建一个方法来否定值并返回 self 但这显然不起作用,因为我会同时更改两个实例.谢谢。 PS:不应该是SimpleExpression中的方法,因为我真的不知道怎么写,所以我没有写。
【问题讨论】:
-
@SebastianPalma:当然不是。那不会回复
evaluate -
“维护引用”是什么意思?这是什么意思,为什么它很重要?
-
我编辑了代码,做puts时出错了。我需要(以某种方式)在 not 和简单表达式之间进行组合。如您所见,如果我否定 exp1,则 exp1 保持不变(true),但 exp3 现在应该是对 exp1 的“否定”引用(在示例中为 false),因此当我将 exp1 设置为 false 时,现在 exp3 应该为 true。
-
@Delsh:啊,我明白了。确实很棘手/不明显:)
-
class SimpleExpression没有匹配的end。该类没有实例方法not。请缩进每一级代码(两个空格是 Ruby 约定),以attr_writer :value开头。
标签: ruby oop reference composition