ruby - 为什么在 Ruby 中,Array ("foo\nbar") == ["foo\n", "bar"]?

标签 ruby arrays string

在 Ruby 1.8.7 中,Array("hello\nhello") 为您提供 ["hello\n", "hello"]。这做了两件我不期望的事情:

  1. 它在换行处拆分字符串。我希望它只是给我一个数组,其中包含我传入的字符串作为其单个元素,而不修改我传入的数据。

  2. 即使您承认在将字符串传递给 Array 时拆分字符串是合理的,为什么它保留换行符而 "foo\nbar".split 不保留换行符?

另外:

>> Array.[] "foo\nbar"
=> ["foo\nbar"]
>> Array.[] *"foo\nbar"
=> ["foo\n", "bar"]

最佳答案

It splits the string on newlines. I'd expect it simply to give me an array with the string I pass in as its single element without modifying the data I pass in.

这是一个和其他任何约定一样好的约定。例如,Python 中的 list 构造函数做了完全不同的事情:

>>> list("foo")
['f', 'o', 'o']

只要它是一致的,我就看不到问题。

Even if you accept that it's reasonable to split a string when passing it to Array, why does it retain the newline character when "foo\nbar".split does not?

我的大胆猜测(由快速谷歌搜索和 TryRuby 支持)是字符串的 .split 方法这样做是为了使其成为 .join< 的“反向”操作 数组的方法。

>> "foospambar".split("spam").join("spam")
=> "foospambar"

顺便说一下,我无法在 TryRuby 上复制你的行为:

>> x = Array("foo\nbar")                                                         
=> ["foo\nbar"]   
>> Array.[] *"foo\nbar"                                                 
=> ["foo\nbar"]   

关于ruby - 为什么在 Ruby 中,Array ("foo\nbar") == ["foo\n", "bar"]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3027952/

相关文章:

Ruby——将散列解压缩到参数列表中

ruby-on-rails - 未初始化的常量 UrlsController::Url

ruby-on-rails - 'people' 的未定义方法为 nil :NilClass

arrays - 可以使用内联语法有条件地将元素添加到数组吗?

javascript - 如何同时映射3个或更多数组

c# - 如何在C#中拆分字符串

python - 在 python 中拆分字符串的最有效方法,如 rubik 的立方体符号?

ruby - 不理解 Ruby ljust/rjust/center 方法

c++ - printf 与 std::string?

c - 在任何 C 库中是否已经有与此类似的功能?