Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么字符串索引返回的是整数值而不是字符?_Ruby_Bash_Executable - Fatal编程技术网

Ruby 为什么字符串索引返回的是整数值而不是字符?

Ruby 为什么字符串索引返回的是整数值而不是字符?,ruby,bash,executable,Ruby,Bash,Executable,在将Ruby代码放入可执行脚本时,字符串的索引行为似乎与IRB中的不同,或者直接运行Ruby代码。例如: $ cat > test #!/usr/bin/ruby -w puts 'hello'[0] $ chmod +x test $ ./test 104 $ ruby -e "puts 'hello'[0]" h 为什么会这样?还有,如何使可执行脚本的行为与“普通”Ruby代码相同?当键入Ruby时,是否确定您正在使用/usr/bin/Ruby?您的$PATH中可能有不同版本的rub

在将Ruby代码放入可执行脚本时,字符串的索引行为似乎与IRB中的不同,或者直接运行Ruby代码。例如:

$ cat > test
#!/usr/bin/ruby -w
puts 'hello'[0]
$ chmod +x test
$ ./test
104
$ ruby -e "puts 'hello'[0]"
h

为什么会这样?还有,如何使可执行脚本的行为与“普通”Ruby代码相同?

当键入
Ruby
时,是否确定您正在使用
/usr/bin/Ruby
?您的$PATH中可能有不同版本的ruby优先于此版本


我不太确定这一点,但如果
String#[]
的返回值不同,我也不会感到惊讶,无论您使用的是ruby 1.8还是1.9,在1.9之前,ruby都会返回单个字符的ASCII字符代码。1.9+切换到返回字符本身:

irb(main):001:0> RUBY_VERSION => "1.8.7" irb(main):002:0> 'foo'[0] => 102 irb(主):001:0>RUBY_版本 => "1.8.7" irb(主要):002:0>“foo”[0] => 102 irb(主):001:0>RUBY_版本 => "1.9.3" irb(主要):002:0>“foo”[0] =>“f”
使用常量
RUBY\u版本
是快速调试此类问题的好方法。

运行不同的RUBY版本?听起来这两个答案对您很有用。您应该接受其中的一个,以便将来访问此页面的访问者知道哪一个效果最好。是的,我刚刚检查了一下,我的系统Ruby是1.8.7。使用#时/usr/bin/env ruby(我使用rvm,目前将其设置为1.9.3)在我的可执行文件中,结果与预期一致。非常感谢你!!! irb(main):001:0> RUBY_VERSION => "1.9.3" irb(main):002:0> 'foo'[0] => "f"