gpt4 book ai didi

ruby - 如何在 Ruby 中将关键字参数设置为默认为未定义

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

我有以下代码

def thing(item: "yeah")
puts item == nil
end
def thing2(item: nil)
thing(item: item)
end
thing2()

我希望看到 false 因为我希望传递给 thingnil 被视为未定义的 item 参数,但是,我看到 true。我怀疑这是因为像 JS 一样,ruby 将 nilundefined 分开。那么有没有一种方法可以将值默认为 undefined 而不是 nil

我当前基于已接受答案的最终版本如下所示......

def default_item 
"yeah"
end
def default_other
"other"
end

def thing(item: default_item(), other: default_other())
puts item + " " + other
end
def thing1(other: default_other())
thing(other: other)
end
def thing2(item: default_item())
thing(item: item)
end
thing1()
thing2()
thing1(other:"Is Other")
thing2(item:"Is Item")
# fail with argument exception
# thing1(item:"Not Item")
# thing2(other:"Not Other")

Code Example

(返回值的方法更多是基于它需要实际返回一个实例值)

我仍然不喜欢到处都是 item: default_item(),所以我愿意接受更好的解决方案。

最佳答案

在 Ruby 中,nil 和不存在是两件截然不同的事情。

thing2item=nil调用thing时,thing实现了item存在,但以 nil 作为其值。因此检查 item==nil 返回 true

我认为您的两个最佳选择是手动检查 nil,并且只使用与其他方法相同的默认值:

选项 1:

def thing(item: "yeah")
puts item == nil
end
def thing2(item: nil)
if item!=nil
thing(item: item)
else
thing()
end
end
thing2()

选项 2:

$DEFAULT = "yeah"
def thing(item: $DEFAULT)
puts item == nil
end
def thing2(item: $DEFAULT)
thing(item: item)
end
thing2()

关于ruby - 如何在 Ruby 中将关键字参数设置为默认为未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47821595/

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