Project1

标题: 为什么RGSS2方法的参数不可以包含and和or? [打印本页]

作者: 有丘直方    时间: 2016-1-28 19:32
标题: 为什么RGSS2方法的参数不可以包含and和or?
本帖最后由 有丘直方 于 2016-1-29 11:41 编辑

有的方法(函数)需要一些真伪值的参数,真伪值也可以用and或者or来连接但是为什么方法中的参数不可以带有这些?而且我已经考虑到了优先级的问题,特意加上了括号。
上面说的可能不够形象,来举个例子。
  1. def 一个垃圾函数(一个垃圾参数)
  2.   print "垃圾是对的!" if 一个垃圾参数 == true
  3.   print "垃圾是错的!" if 一个垃圾参数 == false
  4. end

  5. 一个垃圾函数((1 + 1 == 2) and (2 + 2 == 4))
  6. exit
复制代码
这个代码用来测试。照道理说应该会显示出“垃圾是对的!”但是会显示出错误。
为什么呢?难道方法的参数真的不能有and和or吗?
作者: 喵呜喵5    时间: 2016-1-28 20:22
运算符优先级问题,加括号,或者用 && 和 ||
作者: 有丘直方    时间: 2016-1-28 20:27
喵呜喵5 发表于 2016-1-28 20:22
运算符优先级问题,加括号,或者用 && 和 ||

已经加了括号。——话说&&和||意思与and和or有什么不同
作者: 喵呜喵5    时间: 2016-1-28 20:31
有丘直方 发表于 2016-1-28 20:27
已经加了括号。——话说&&和||意思与and和or有什么不同
  1. 一个垃圾参数(((1 + 1 == 2) and (2 + 2 == 4)))
复制代码
and/or 不同于 &&/||
  1. surprise = true and false # => surprise is true
  2. surprise = true && false  # => surprise is false
复制代码
最佳实践
只使用 && / || 运算符。
详情
and / or 运算符的优先级比 && / || 低
and / or 的优先级比 = 低,而 && / || 的优先级比 = 高
and 和 or 的优先级相同,而 && 的优先级比 || 高
我们来给上述示例代码加上括号,这样就可以明显地看出 and 和 && 在用法上的不同之处了。
  1. (surprise = true) and false # => surprise is true
  2. surprise = (true && false)  # => surprise is false
复制代码
也有这样的说法:and / or 用于流程控制,而 && / || 用于布尔型运算。但我认为:不要使用这些运算符的关键字版本(and / or / not),而使用更为清晰的 if 和 unless 等。更加明确,更少困惑,更少 bugs。
延伸阅读:Difference between “or” and || in Ruby?(http://stackoverflow.com/questio ... ween-or-and-in-ruby)




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1