【问题标题】:Why does a string index return an integer value instead of a character?为什么字符串索引返回一个整数值而不是一个字符?
【发布时间】:2013-03-12 08:57:22
【问题描述】:

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

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

这是为什么?而且,如何使可执行脚本的行为与“普通”Ruby 代码相同?

【问题讨论】:

  • 运行不同的 ruby​​ 版本?
  • 听起来这两个答案对你有用。您应该接受其中一个,以便该页面的未来访问者知道哪一个效果最好。 (并让回答者高兴)。

标签: ruby bash executable


【解决方案1】:

在 1.9 之前,Ruby 返回单个字符的 ASCII 字符代码。 1.9+ 切换到返回角色本身:

irb(main):001:0> RUBY_VERSION =>“1.8.7” irb(main):002:0> 'foo'[0] => 102 irb(main):001:0> RUBY_VERSION =>“1.9.3” irb(main):002:0> 'foo'[0] => "f"

使用常量RUBY_VERSION 是快速调试此类问题的好方法。

【讨论】:

    【解决方案2】:

    输入ruby 时,您确定您使用的是/usr/bin/ruby 吗?您的 $PATH 中可能有不同版本的 ruby​​ 优先于这个。

    对此我不太确定,但如果String#[] 有不同的返回值,无论您使用的是 ruby​​ 1.8 还是 1.9,我都不会感到惊讶

    【讨论】:

    • 是的,我刚刚检查了一下,我的系统 Ruby 是 1.8.7。在我的可执行文件中使用 #!/usr/bin/env ruby​​(我使用 rvm 并且当前将其设置为 1.9.3)时,结果与预期一致。非常感谢!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2016-06-15
    • 1970-01-01
    • 2020-04-08
    • 2013-08-12
    • 1970-01-01
    • 2021-12-21
    相关资源
    最近更新 更多