gpt4 book ai didi

ruby - 类型错误 : wrong argument type with Ruby &~ operator

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

我尝试比较我的 Ruby 应用程序中的标志。

我有这段代码:

if self.flag &~ flag == self.flag
return false

但是它不会运行。我已将问题范围缩小到:

irb(main):020:0> my_user.flag
=> 1
irb(main):021:0> flag
=> 128
irb(main):022:0> my_user.flag.class
=> Fixnum
irb(main):023:0> flag.class
=> Fixnum
irb(main):024:0> my_user.flag &~ flag
TypeError: wrong argument type Fixnum (expected Proc)

这真的很令人不安,因为它是这样工作的:

irb(main):025:0> 1 &~ 128
=> 1

最佳答案

1 &~ 128my_user.flag &~ flag 之间的区别是第二个表达式涉及点方法调用。这改变了后续标记的解释方式。

试试这个:

# works
my_user.flag() &~ flag

# also works
(my_user.flag) &~ flag

# best
my_user.flag & ~flag

您会发现它有效。这是因为添加 () 或移动 ~ 会更改操作顺序,使其更符合您的预期。

您正在使用的原始方法调用实际上被 Ruby 解释为:

# bad
my_user.flag(&(~flag))

此操作顺序首先通过应用 ~ 运算符翻转 flag 中的位,然后尝试对生成的 调用 to_proc >Fixnum 因为应用了 & (cast-as-block) 运算符,然后最终尝试(如果没有抛出 TypeError)通过它作为 User#flag 方法的 block 参数。

关于ruby - 类型错误 : wrong argument type with Ruby &~ operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32092811/

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