[#45341] 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...>

 ささだです.

28 messages 2012/03/11
[#45816] Re: 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...> 2012/06/25

 ささだです.

[#45817] Re: 非同期割り込みに対する対処案(日本語版) — Tanaka Akira <akr@...> 2012/06/25

2012年6月25日 18:26 SASADA Koichi <ko1@atdot.net>:

[#45819] Re: 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...> 2012/06/25

 ささだです.

[#45820] Re: 非同期割り込みに対する対処案(日本語版) — Tanaka Akira <akr@...> 2012/06/25

2012年6月25日 19:39 SASADA Koichi <ko1@atdot.net>:

[#45827] Re: 非同期割り込みに対する対処案(日本語版) — SASADA Koichi <ko1@...> 2012/06/25

(2012/06/25 20:32), Tanaka Akira wrote:

[#45841] Re: 非同期割り込みに対する対処案(日本語版) — Tanaka Akira <akr@...> 2012/06/25

2012年6月26日 3:40 SASADA Koichi <ko1@atdot.net>:

[#45372] Marshal.dumpにおけるインスタンス変数の取り扱いについて — keiju@... (Keiju ISHITSUKA)

けいじゅ@いしつかです.

14 messages 2012/03/16
[#45376] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて — Yukihiro Matsumoto <matz@...> 2012/03/17

まつもと ゆきひろです

[#45377] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて — keiju@... (石塚圭樹) 2012/03/17

けいじゅ@いしつかです.

[#45381] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて — Yukihiro Matsumoto <matz@...> 2012/03/17

まつもと ゆきひろです

[#45399] Re: Marshal.dumpにおけるインスタンス変数の取り扱いについて — keiju@... (石塚圭樹) 2012/03/18

けいじゅ@いしつかです.

[#45412] [ruby-trunk - Feature #6177][Open] array.cのrb_ary_equal()の高速化 — "Glass_saga (Masaki Matsushita)" <glass.saga@...>

13 messages 2012/03/20

[#45471] [ruby-trunk - Bug #6230][Open] [WEBrick] WEBrick::HTTPResponse#body の IO オブジェクトの読み込みに read メソッドを使っているため必要以上にブロックされる — "nobuoka (yu nobuoka)" <nobuoka@...>

7 messages 2012/03/30

[ruby-dev:45430] [ruby-trunk - Bug #6195] String#[] に逆順の Range を渡した場合の挙動

From: "shugo (Shugo Maeda)" <redmine@...>
Date: 2012-03-23 14:38:39 UTC
List: ruby-dev #45430
Issue #6195 has been updated by shugo (Shugo Maeda).


前田です。

mrkn (Kenta Murata) wrote:
> 以下のように String#[] に対して、範囲の開始インデックスが文字列の長さ以下の値である逆順の Range (beg > end) を渡した場合に空文字列が返ります。
> 
>   "1"[1..0] #=> ""
>   "1"[1..-1] #=> ""
>   "123"[2..1] #=> ""
>   "123"[2..-2] #=> ""
> 
> 一方、範囲の開始インデックスが文字列の長さより大きい場合は nil が返ります。
> 
>   "1"[2..0] #=> nil
>   "1"[2..-1] #=> nil
>   "123"[4..1] #=> nil
>   "123"[4..-2] #=> nil
> 
> この挙動の違いは、rb_range_beg_len の実装に起因しています。
> 文字列のインデックスが昇順のみである仕様を考慮すると、上記前者の場合も nil が返るべきじゃないかと思います。

私も最初そう思ったのですが、PythonやJavaScriptではどちらの場合も空文字列を返すようです。
# 以下の例はどちらもRubyのs[x...y]相当(s[x..y]ではない)です。

  defiant:ruby$ python
  Python 2.7.2+ (default, Oct  4 2011, 20:03:08) 
  [GCC 4.6.1] on linux2
  Type "help", "copyright", "credits" or "license" for more information.
  >>> "abc"[1:2]
  'b'
  >>> "abc"[1:1]
  ''
  >>> "abc"[1:0]
  ''
  >>> "abc"[4:0]
  ''
  defiant:ruby$ js
  > "abc".slice(1,2)
  'b'
  > "abc".slice(1,1)
  ''
  > "abc".slice(1,0)
  ''
  > "abc".slice(4,0)
  ''

これはこれで合理的だと思いますがどうでしょうか。

また、Net::FTP#parse227が今の挙動に依存しているようです。

    def parse227(resp) # :nodoc:
      if resp[0, 3] != "227"
        raise FTPReplyError, resp
      end
      left = resp.index("(")
      right = resp.index(")")
      if left == nil or right == nil
        raise FTPProtoError, resp
      end
      numbers = resp[left + 1 .. right - 1].split(",")
      if numbers.length != 6
        raise FTPProtoError, resp
      end
      host = numbers[0, 4].join(".")
      port = (numbers[4].to_i << 8) + numbers[5].to_i
      return host, port
    end

respが"227 )("のようなケースでも今のString#[]ではresp[left + 1 .. right - 1]
が""になるのでsplitできますが、nilを返すようになるとnil.split(",")でNoMethodError
になってしまいます。
このコードがひどいと言われればそれまでですが、若気の至りということで。
# たぶん当時のftplib.pyのパクリなんだろうなあ。
----------------------------------------
Bug #6195: String#[] に逆順の Range を渡した場合の挙動
https://bugs.ruby-lang.org/issues/6195#change-25071

Author: mrkn (Kenta Murata)
Status: Open
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-03-23 trunk 35121) [x86_64-darwin11.3.0]


以下のように String#[] に対して、範囲の開始インデックスが文字列の長さ以下の値である逆順の Range (beg > end) を渡した場合に空文字列が返ります。

  "1"[1..0] #=> ""
  "1"[1..-1] #=> ""
  "123"[2..1] #=> ""
  "123"[2..-2] #=> ""

一方、範囲の開始インデックスが文字列の長さより大きい場合は nil が返ります。

  "1"[2..0] #=> nil
  "1"[2..-1] #=> nil
  "123"[4..1] #=> nil
  "123"[4..-2] #=> nil

この挙動の違いは、rb_range_beg_len の実装に起因しています。
文字列のインデックスが昇順のみである仕様を考慮すると、上記前者の場合も nil が返るべきじゃないかと思います。



-- 
http://bugs.ruby-lang.org/

In This Thread