条件如何处理?

发布于 2024-12-23 17:38:18 字数 327 浏览 1 评论 0原文

如果结果为零,那么我得到 NoMethodError - undefined method 'length' for nil:NilClass:

有什么方法我不必使用两个条件吗? 我想如果结果为空,则 ruby​​ 不会评估条件的第二部分,因为条件永远不会为真。

if (not results.empty? && results[-1].length == 2)
  (4-results[-1].length).times {|i| results[-1] << ""}
end

If the results is nil then I get NoMethodError - undefined method 'length' for nil:NilClass:

Is there any way I don't have to use two conditions? I thought that ruby won't evaluate the second part of the condition in case results is empty because the condition can be never true.

if (not results.empty? && results[-1].length == 2)
  (4-results[-1].length).times {|i| results[-1] << ""}
end

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

风月客 2024-12-30 17:38:18

我会考虑将其更改为 IMO 更好地“读取”的内容:

if results.any? && (results[-1].length == 2)
  ...
end

为了避免两个明确的条件,请安装 andand gem

pry(main)> require 'andand'
pry(main)> r1 = []
pry(main)> r2 = ["hi", "there"]
pry(main)> r3 = ["hi", "no"]
pry(main)> puts "foo" if r1[-1].andand.length == 2
=> nil
pry(main)> puts "foo" if r2[-1].andand.length == 2
=> nil
pry(main)> puts "foo" if r3[-1].andand.length == 2
foo
=> nil

I'd consider changing it to something that IMO "reads" better:

if results.any? && (results[-1].length == 2)
  ...
end

To avoid two explicit conditions, install the andand gem:

pry(main)> require 'andand'
pry(main)> r1 = []
pry(main)> r2 = ["hi", "there"]
pry(main)> r3 = ["hi", "no"]
pry(main)> puts "foo" if r1[-1].andand.length == 2
=> nil
pry(main)> puts "foo" if r2[-1].andand.length == 2
=> nil
pry(main)> puts "foo" if r3[-1].andand.length == 2
foo
=> nil
简单爱 2024-12-30 17:38:18

在 ruby​​ 中,not 运算符的优先级低于 < code>&& 因此您的代码被解释为

not (results.empty? && (results[-1].length == 2))

您可能想要使用 !相反,它的作用与 not 相同,但优先级更高。

In ruby the not operator has lower precedence than && so your code is being interpreted as

not (results.empty? && (results[-1].length == 2))

You probably want to use the ! operator instead which does the same as not but has higher precedence.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文