Ruby中&&和和操作符的区别是什么?
当前回答
并且只检查第一个条件并给出结果 另一方面&&强检查两个条件并给出逻辑结果。
其他回答
实际的区别是结合强度,如果你没有准备好,这可能会导致奇怪的行为:
foo = :foo
bar = nil
a = foo and bar
# => nil
a
# => :foo
a = foo && bar
# => nil
a
# => nil
a = (foo and bar)
# => nil
a
# => nil
(a = foo) && bar
# => nil
a
# => :foo
||和or也是一样。
||和&&与编程语言中布尔运算符的优先级绑定(&&非常强,||略弱)。
和和的优先级更低。
例如,不像||,or的优先级比=低:
> a = false || true
=> true
> a
=> true
> a = false or true
=> true
> a
=> false
类似地,与&&不同,and的优先级也低于=:
> a = true && false
=> false
> a
=> false
> a = true and false
=> false
> a
=> true
更重要的是,不像&&和||,和和或绑定具有相同的优先级:
> !puts(1) || !puts(2) && !puts(3)
1
=> true
> !puts(1) or !puts(2) and !puts(3)
1
3
=> true
> !puts(1) or (!puts(2) and !puts(3))
1
=> true
弱绑定的and和or对于控制流的目的可能很有用:参见http://devblog.avdi.org/2010/08/02/using-and-and-or-in-ruby/。
并且优先级低于&&。
但对于一个不太谦虚的用户来说,如果它与其他优先级介于两者之间的操作符一起使用,例如赋值操作符,则可能会出现问题:
def happy?() true; end
def know_it?() true; end
todo = happy? && know_it? ? "Clap your hands" : "Do Nothing"
todo
# => "Clap your hands"
todo = happy? and know_it? ? "Clap your hands" : "Do Nothing"
todo
# => true
和&&相同,但优先级更低。它们都使用短路计算。
警告:and even的优先级比=低,所以你通常要避免使用and。何时使用和应该使用的例子可以在Rails指南“避免双重渲染错误”下找到。
我不知道这是Ruby的意图还是一个bug,但是试试下面的代码。这段代码在Ruby 2.5.1版本和Linux系统上运行。
puts 1 > -1 and 257 < 256
# => false
puts 1 > -1 && 257 < 256
# => true
推荐文章
- 是否可以在MiniTest中运行单个测试?
- 如何在Ruby中生成a和b之间的随机数?
- 无法安装gem -未能建立gem本地扩展-无法加载这样的文件——mkmf (LoadError)
- 如何在Ruby中创建文件
- 什么是Ruby文件。开放模式和选项?
- Ruby数组到字符串的转换
- 如何分割(块)一个Ruby数组成X元素的部分?
- Ruby中“or”和||的区别?
- 如何测试参数是否存在在轨道
- 静态隐式运算符
- 逗号运算符是做什么的?
- 三元算符在R中存在吗?
- 常见的Haskell操作符是否有可发音的名称?
- 在Ruby中不创建新字符串而修饰字符串的规范方法是什么?
- RVM不是一个函数,用' RVM use…’不会起作用