[ruby-list:50211] Re: String#split に nil を渡した時の動作について

From: "TAKANO `takano32' Mitsuhiro" <tak@...32.tk>
Date: 2015-07-27 06:34:53 UTC
List: ruby-list #50211
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 大塚達也 <towzero3@gmail.com>:
> こんにちは、大塚と申します。
>
> 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 を渡しているのに
> デフォルト値の $; が使われるのはバグだと思うのですが、
> どうでしょうか。

In This Thread

Prev Next