Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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中,为什么数组(";foo\nbar";)=[";foo\n";,";bar";]?_Ruby_Arrays_String - Fatal编程技术网

在Ruby中,为什么数组(";foo\nbar";)=[";foo\n";,";bar";]?

在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" =>

在Ruby 1.8.7中,
数组(“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"]