gpt4 book ai didi

ruby - 为什么不使用 `@messages`?

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

以下来自The Rspec Book .我想知道为什么 messages << messagedef puts不是 @messages << message .我明白 ||= []是内存,我也明白@messages是实例变量。那么,是否应该在同一个类(class)中使用呢?还是打错了?

class Output
def messages
@messages ||= []
end

def puts(message)
messages << message
end
end

def output
@output ||= Output.new
end

Given /^I am not yet playing$/ do
end

When /^I start a new game$/ do
game = Codebreaker::Game.new(output)
game.start
end

Then /^I should see "([^"]*)"$/ do |message|
output.messages.should include(message)
end

最佳答案

我认为您混淆了 @messages 变量和 messages 方法

class Output
def messages
@messages ||= []
end

def puts(message)
messages << message #=> here `messages` refer to the method above
end
end

这是一个简单的例子

class Output
def m
@messages ||= []
end

def puts(message)
m << message #=> method `m`
end
end

v = Output.new
v.puts "blah"
v.m #=> ["blah"]

示例 2(为了更清楚)

class Output
def m
@messages ||= []
end

def puts(message)
m << message #=> here `m` refer to the method above
end

def show_at_messages_variable
@messages
end
end

v = Output.new
v.puts "blah"
v.show_at_messages_variable #=> ["blah"]

关于ruby - 为什么不使用 `@messages`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19476681/

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