gpt4 book ai didi

Ruby - 使用 && 时的意外行为

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

当我写下一行时:

if (collection.respond_to? :each && collection.respond_to? :to_ary)

我的 IDE (Aptana Studio 3) 出现以下错误:, unexpected tSYMBEG

但是,如果我添加括号,错误就会消失:

if ((collection.respond_to? :each) && (collection.respond_to? :to_ary))

或者把&&改成and:

if (collection.respond_to? :each and collection.respond_to? :to_ary)

知道为什么会这样吗?另外&&and有什么区别?

谢谢

最佳答案

&& 有一个高 precedence (强于and,强于=)。

foo = 3 and 5 # sets foo = 3
foo = 3 && 5 # sets foo = true

它也比模棱两可的函数调用更强大。你的代码是这样解析的

 if (collection.respond_to? :each && collection.respond_to? :to_ary)
if (collection.respond_to? (:each && collection.respond_to?) :to_ary)

这没有任何意义。在使用 and 时会这样解析

 if (collection.respond_to? :each and collection.respond_to? :to_ary)
if (collection.respond_to?(:each) and collection.respond_to?(:to_ary))

我建议您使用这个(因为它不依赖于 operator precedence 规则并且使用最少的大括号,具有最短的大括号距离,并且使用更经常出现的 if条件下发现&&):

 if collection.respond_to?(:each) and collection.respond_to?(:to_ary)

关于Ruby - 使用 && 时的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5530049/

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