我Integer( param )
在 Ruby 和NUM2INT( param )
本机扩展中使用它作为接受任何可以在我的公共接口中转换为 Integer 的参数的方式。
最近我遇到了 Ruby 1.8 和 1.9 之间的行为差异,其中 1.9 会引发错误,但 1.8 会从Symbol
to Fixnum
(或 C 中的等价物int
)产生不必要的强制:
在 1.9.3 中,我想要的行为:
1.9.3-p327 :001 > Integer( :foo )
TypeError: can't convert Symbol into Integer
在 1.8.7 中,我不想要的行为:
1.8.7 :001 > Integer( :foo )
=> 15081
这是因为我在发送符号参数而不是整数时在测试中断言了 TypeError,结果我得到了一些 Travis 失败。现在,我已经停止Symbol
在我的测试中使用 s 作为错误参数的示例。但是我可以/应该为 1.8.7 兼容性做更多的事情吗?