gpt4 book ai didi

ruby 语法糖 : dealing with nils

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

可能已经问过了,但我找不到它。这里有 2 个常见的情况(对我来说,在编程 Rails 时......)用 ruby​​ 编写是令人沮丧的:

"a string".match(/abc(.+)abc/)[1]

在这种情况下,我得到一个错误,因为字符串不匹配,因此在 nil 上调用 [] 运算符。我想找到的是比以下内容更好的替代方法:

temp="a string".match(/abc(.+)abc/); temp.nil? ? nil : temp[1]

简而言之,如果不匹配,则简单地返回 nil 而不会出错

第二种情况是这样的:

var = something.very.long.and.tedious.to.write
var = something.other if var.nil?

在这种情况下,我只想为 var 分配一些东西,如果它不是 nil,如果它是 nil,我会分配一些东西.other..

有什么建议吗?谢谢!

最佳答案

在 Ruby on Rails 中,您可以在任何对象上使用 try 方法。根据 API:

调用符号方法标识的方法,将任何参数和/或指定的 block 传递给它,就像常规的 Ruby Object#send 一样。

然而,与该方法不同的是,如果接收对象是 nil 对象或 NilClass,则不会引发 NoMethodError 异常,而是返回 nil。

所以对于第一个问题你可以这样做:

"a string".match(/abc(.+)abc/).try(:[], 1)

它会无误地给你 [1] 或 nil。

关于ruby 语法糖 : dealing with nils,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4565496/

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