Project1

标题: 请教这个"|="到底是神马意思! [打印本页]

作者: taeckle    时间: 2021-12-4 02:13
标题: 请教这个"|="到底是神马意思!
研究了半天也没弄明白,比如:
a = 3
b = 2
a |= b
p a
P出来的a是3
但要是
a = 3
b = 4
a |= b
p a
P出来的a却是7

尤其是在默认脚本Game_Battler_2中的第282行effective |= self.state?(i) (位于def states_minus(minus_state_set)),这里的|=到底是神马意思呢?

  1.   #--------------------------------------------------------------------------
  2.   # ● 状态变化 (-) 的使用
  3.   #     minus_state_set : 状态变化 (-)
  4.   #--------------------------------------------------------------------------
  5.   def states_minus(minus_state_set)
  6.     # 清除有效标志
  7.     effective = false
  8.     # 循环 (解除状态)
  9.     for i in minus_state_set
  10.       # 如果这个状态被附加则设置有效标志
  11.       effective |= self.state?(i)
  12.       # 设置状态变化标志
  13.       @state_changed = true
  14.       # 解除状态
  15.       remove_state(i)
  16.     end
  17.     # 过程结束
  18.     return effective
  19.   end
复制代码


还请大家指点指点,多谢了!
作者: Istrien    时间: 2021-12-4 02:57
这个是位运算符,计算之前把两个数写成二进制。

比如 a = 3 = 0011B,b = 2 = 0010B
那么 a | b 的结果是按位做或运算,如下
  a     0   0   1   1
  b     0   0   1   0
a|b    0   0   1   1
所以结果是 0011B = 3

同样的如果 a = 3 = 0011B,b = 4 = 0100B,那么算出来 a|b = 0111B = 7

你贴出来的这一段里面 effective 和方法 self.state? 返回的都是 T / F
对true / false 做运算时位或 | 和逻辑或 || 效果一样的
就等同于写 effective ||= self.state?(i)
作者: miantouchi    时间: 2021-12-4 09:41
从菜刀大大那先学现卖下,|= 是叫做  位或
true |=true   #=>true
true |=false  #=>true
false | true   #=>true
false | false  #=>false
从这里得到只有这个符号左右两边都是false,结果才是false.

接下来再从你的代码入手
首先,这段代码初始effective = false
effective |= self.state?(i) 等价于  effective = effective | self.state?(i)

也就是 effective = false | self.state?(i)  
从这可以看出来 self.state?(i)  如果是true  最终effective 就是true,
self.state?(i)  如果是false 最终effective 就是false,





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