在Ruby中,为什么数组(";foo\nbar";)=[";foo\n";,";bar";]?
在Ruby 1.8.7中,在Ruby中,为什么数组(";foo\nbar";)=[";foo\n";,";bar";]?,ruby,arrays,string,Ruby,Arrays,String,在Ruby 1.8.7中,数组(“hello\nhello”)提供[“hello\n”,“hello”]。这有两件事我没想到: 它在换行符上拆分字符串。我希望它只给我一个数组,其中字符串作为它的单个元素传入,而不修改传入的数据 即使您接受在将字符串传递给数组时拆分字符串是合理的,为什么在“foo\nbar”时它会保留换行符呢 此外: >> Array.[] "foo\nbar" => ["foo\nbar"] >> Array.[] *"foo\nbar" =>
数组(“hello\nhello”)
提供[“hello\n”,“hello”]
。这有两件事我没想到:
“foo\nbar”时它会保留换行符呢
>> Array.[] "foo\nbar"
=> ["foo\nbar"]
>> Array.[] *"foo\nbar"
=> ["foo\n", "bar"]
如果将双引号替换为单引号,则会按预期工作:
>> Array.[] "foo\nbar"
=> ["foo\nbar"]
>> Array.[] 'foo\nbar'
=> ["foo\\nbar"]
你可以尝试:
"foo\nbar".split(/w/)
"foo\nbar".split(/^/)
"foo\nbar".split(/$/)
和其他正则表达式
它在换行符上拆分字符串。我希望它只给我一个数组,其中字符串作为它的单个元素传入,而不修改传入的数据
这是一个很好的惯例。例如,Python中的list
构造函数做了一些完全不同的事情:
>>> list("foo")
['f', 'o', 'o']
只要是一致的,我就看不出问题所在
即使您接受在将字符串传递给数组时拆分字符串是合理的,为什么在“foo\nbar”时它会保留换行符呢
我的猜测是(通过快速谷歌搜索和支持)字符串的.split
方法使其成为数组的.join
方法的“反向”操作
>> "foospambar".split("spam").join("spam")
=> "foospambar"
顺便说一下,我不能在以下方面复制你的行为:
不,事实上,这意味着新行根本没有被解释。这是泰森想要的,尽管它没有回答why.FWIW,但在Ruby 1.9.1中不再如此。根本不进行分割。是的,为了向后兼容:)(虽然Ruby的策略可能是在版本号的微小更改上打破它,而不是在主要更改上。再说一次,任何约定都和其他约定一样好,而且总比没有好。)我想这是为了让您可以编写数组(File.read(filename))
,它将为您提供一个(未比对)如您所料的行。
>> x = Array("foo\nbar")
=> ["foo\nbar"]
>> Array.[] *"foo\nbar"
=> ["foo\nbar"]