ruby
2012-06-19 33 views 2 likes 
2

IRB和Ruby如何执行某些表达式有区别吗?为什么我在IRB和脚本中获得不同的结果?

这些表达式在IRB中以及从命令行运行时会产生不同的结果。问题是,哪一个是正确的?

IRB:

>> s = 'hello' 
=> "hello" 
>> s.size 
>> s[s.length] = '!' 
IndexError: index 5 out of string 
    from (irb):31:in `[]=' 
    from (irb):31 
>> 

而在正常的脚本:

s = 'hello' 
s[s.length] = '!' 
puts s 

laptop user$ ./prgruby.rb 
hello! 
+0

第一个从irb提示符为我工作。 Windows上的ruby 1.9.2p0。 –

+0

1.9.2p290/OSX,既不抛出异常。 – Amadan

+3

也许这些脚本运行在不同的ruby中。在运行时通过打印ruby版本来检查它。 – megas

回答

1

HereString#[]1.8.7商务部:

str[fixnum] = fixnum 

是采取一个Fixnum的形式将引发IndexError i F的值 超出范围

Here1.9.3同一文档:相同的定义存在

试验后,发生什么用Ruby 1.9.3是s.length不超出范围分配。这是有意义的,它是字符串的结尾:你不必任意填充缺失的索引,但我想它可能是或应该记录在某处?

+0

是的,我发现这些字符串替换/分配/切片操作有点奇怪。例如:s [s.size,1]返回空字符串,即使我们正在查看范围 - 除非字符串是用'\ 0'字符在C中完成的。 s [s.size + 1,1]另一个返回nil,这可以确认“字符串最终化”理论...无论如何,如果有人可以给我一些提示,这里... – gyre

相关问题