gpt4 book ai didi

ruby - ruby attr_accessor 的奇怪行为

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

我有这段代码:

class CallMe
attr_accessor :a, :b, :c

def self.start(*args)
self.new(*args).get_answer
end

def initialize(a,b,c)
@a = a
@b = b
@c = c
end

def get_answer
if c
b = nil
else
return b
end
end
end
answer = CallMe.start(1,2,nil)

为什么当我在 irb 中运行它时,我总是得到 answer = nil 即使逻辑情况是得到 b 值为 2

最佳答案

Variable Hoisting 效果在许多语言中使用。对于 Ruby,它在 official documentation 中进行了描述:

The local variable is created when the parser encounters the assignment, not when the assignment occurs

因此,get_answer 方法创建本地 变量b 而不管c 的值。 And 在创建时将局部变量b 赋值给nil。然后 get_answer 返回始终为 nil 的局部变量 b

正确方法:

def get_answer
c ? self.b = nil : b
end

关于ruby - ruby attr_accessor 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45056228/

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