From: TAKANO `takano32' Mitsuhiro Date: 2015-07-27T15:34:53+09:00 Subject: [ruby-list:50211] Re: String#split に nil を渡した時の動作について string.c にて rb_str_split{,_m} あたりで ``` if (NIL_P(spat)) { if (!NIL_P(rb_fs)) { spat = rb_fs; goto fs_set; } split_type = awk; } ``` で ``` rb_fs = Qnil; rb_define_variable("$;", &rb_fs); rb_define_variable("$-F", &rb_fs); ``` というコードになっているみたいなので、挙動は指摘の通りで 実装のバグなのかリファレンスのバグなのかわからないですが、 食い違ってますね。 -- TAKANO Mitsuhiro a.k.a. takano32 2015年7月25日 18:38 大塚達也 : > こんにちは、大塚と申します。 > > String#split の第1引数に nil を渡した時の動作について質問があります。 > (BUGか仕様か分からなかったのでこちらで質問します。) > > リファレンスマニュアルには、第1引数に nil を渡した時は > 「先頭と末尾の空白を除いたうえで、空白文字列で分割する。」 > という記述があります。 > http://docs.ruby-lang.org/ja/2.2.0/method/String/i/split.html > > > しかし、実際には nil を渡した時は $; の値で分割されるようです。 > > $; = "XY" > "aXYbXYcXY".split(nil) #=> ["a", "b", "c"] > > > リファレンスマニュアルを読む限りでは、 > split(sep = $;, limit = 0) > という定義になっているので、nil を渡しているのに > デフォルト値の $; が使われるのはバグだと思うのですが、 > どうでしょうか。