gpt4 book ai didi

ruby - 为什么让(:counter) { 0 } returns nil in example?

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:29 25 4
gpt4 key购买 nike

Rspec 中有两个变量,它们都是整数,但在示例中(在'before' block 中)其中一个是适当的自己的值,另一个是零。为什么?!从未听说过如此奇怪的 rspec 行为。

尝试将 0 值更改为 1,尝试更改变量名称,尝试将“让”更改为“让!”,但行为没有改变。

代码是:

context 'when input contains incorrect symbols' do
let(:counter) { 1 }
let(:mocked_retry_count) { 5 }
before do
allow(described_class).to receive(:gets) {
byebug
counter += 1
counter > mocked_retry_count ? 'Stop the loop' : ['$', (0..9).to_a.sample, '#', '%', '&'].sample
}
described_class.ask_kingdoms
end
end

在 byebug 的输出中我看到了

   62:       let(:counter) { 1 }
63: let(:mocked_retry_count) { 5 }
64: before do
65: allow(described_class).to receive(:gets) {
66: byebug
=> 67: counter += 1
68: counter > mocked_retry_count ? 'Stop the loop' : ['$', (0..9).to_a.sample, '#', '%', '&'].sample
69: }
70: described_class.ask_kingdoms
71: end
(byebug) counter
nil
(byebug) mocked_retry_count
5

'counter' 和 'mocked_retry_count' 之间的主要区别是什么?我怎样才能得到我的计数器示例?

最佳答案

Why let(:counter) { 0 } returns nil in example?

不,它没有。 counter不是你想的那样。尝试评估/打印 defined?(counter)defined?(mocked_retry_count) .

What is the principal difference between 'counter' and 'mocked_retry_count' ?

您没有分配给 mocked_retry_count .记住,let创建方法。因此,当您尝试分配给 counter 时,您正在创建一个局部变量 counter这会影响你的方法 counter (默认值为 nil )。

这篇文章解释得更详细:Why is `a = a` `nil` in Ruby?

关于ruby - 为什么让(:counter) { 0 } returns nil in example?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58695767/

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