【发布时间】:2014-02-05 11:14:08
【问题描述】:
根据docs,我相信下面使用 Ruby 1.9.2 的示例应该以与 Ruby 1.9.3 相同的方式工作,但事实并非如此。给定一个文件test,其内容为hello:
Ruby 1.9.3p484:
File.read "test", 4, :mode => 'rb'
# => "HELL"
红宝石 1.9.2p320
File.read "test", 4, :mode => 'rb'
# => TypeError: can't convert Hash into Integer
似乎 Ruby 1.9.2 和 1.9.3 在处理 File.read 的可选参数的方式上有所不同。为什么?我不知道它是在哪里声明的。
【问题讨论】:
-
FWIW,我无法重现这个(Ruby 1.9.3p286、i386-cygwin / Ruby 1.9.3p125、i386-mingw32)
-
@FrankSchmitt 我相信它必须在 1.9.2 上复制
-
@МалъСкрылевъ 你是对的,当然。显然,我有点困惑:-)
-
我没有在任何地方安装 1.9.2 来确认,但我怀疑如果您在参数周围使用括号,问题就会消失。虽然括号是可选的,但它们非常重要,尤其是在处理多个参数时,尤其是在处理块时。我建议始终使用它们来消除任何歧义,但 YMMV。
-
@theTinMan 这不是语法或歧义问题。当用括号消除任何歧义时,我也可以重现这一点。仅仅,这似乎是从参数列表中正确解析选项哈希的问题。
标签: ruby file ruby-1.9.2