Project

General

Profile

Actions

Bug #8471

closed

パーセント記法とString #メソッドの組み合わせの戻り値が異常

Added by taka-yoshi (taka-yoshi taka) over 11 years ago. Updated over 11 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.1]
[ruby-dev:47384]

Description

***再現手順
下記のコードを実行すると。''が戻ってきます。
(%%%%%%%).nil? => ''

上記ではnil?を取り上げましたが、
実際は全メソッドで''が戻ってきます。

この戻ってきたものに対して各種メソッドを呼んでも''が返ってきます。
%%%%%%%.class.class.class.class => ''

下記の環境で確認しています。
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.1]
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.2.1]
ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]
ruby 2.0.0p0 (2013-02-24) [x64-mingw32]

特に実害はないと思います。

Updated by no6v (Nobuhiro IMAI) over 11 years ago

下記のコードを実行すると。''が戻ってきます。
(%%%%%%%).nil? => ''

これは false が返るんじゃないでしょうか?

この戻ってきたものに対して各種メソッドを呼んでも''が返ってきます。
%%%%%%%.class.class.class.class => ''

これは、%%% % %%%.class と解釈されて、%%% は %() などと同じく(空)文字列のリテラルで、
"" % xxx だと、xxx が(多分)何であろうと空文字列が返るので、特におかしなところはないと思います。

$ ruby -rripper -rpp -ve 'pp Ripper.lex("%%%%%%%.class")'
ruby 2.1.0dev (2013-06-01 trunk 41011) [x86_64-linux]
[[[1, 0], :on_tstring_beg, "%%"],
[[1, 2], :on_tstring_end, "%"],
[[1, 3], :on_op, "%"],
[[1, 4], :on_tstring_beg, "%%"],
[[1, 6], :on_tstring_end, "%"],
[[1, 7], :on_period, "."],
[[1, 8], :on_ident, "class"]]

2番めと3番め、6番めと7番めをいろんな記号に置き換えてみると雰囲気がつかめるんじゃないでしょうか。

Updated by no6v (Nobuhiro IMAI) over 11 years ago

2番めと3番め、6番めと7番めをいろんな記号に置き換えてみると雰囲気がつかめるんじゃないでしょうか。

「2番めと3番め、6番めと7番めの % を」という意味でした。

$ ruby -rripper -rpp -ve 'pp Ripper.lex("%()%%!!.class")'
ruby 2.1.0dev (2013-06-01 trunk 41011) [x86_64-linux]
[[[1, 0], :on_tstring_beg, "%("],
[[1, 2], :on_tstring_end, ")"],
[[1, 3], :on_op, "%"],
[[1, 4], :on_tstring_beg, "%!"],
[[1, 6], :on_tstring_end, "!"],
[[1, 7], :on_period, "."],
[[1, 8], :on_ident, "class"]]

Updated by taka-yoshi (taka-yoshi taka) over 11 years ago

no6v (Nobuhiro IMAI) wrote:

2番めと3番め、6番めと7番めをいろんな記号に置き換えてみると雰囲気がつかめるんじゃないでしょうか。

「2番めと3番め、6番めと7番めの % を」という意味でした。

$ ruby -rripper -rpp -ve 'pp Ripper.lex("%()%%!!.class")'
ruby 2.1.0dev (2013-06-01 trunk 41011) [x86_64-linux]
[[[1, 0], :on_tstring_beg, "%("],
[[1, 2], :on_tstring_end, ")"],
[[1, 3], :on_op, "%"],
[[1, 4], :on_tstring_beg, "%!"],
[[1, 6], :on_tstring_end, "!"],
[[1, 7], :on_period, "."],
[[1, 8], :on_ident, "class"]]

ご回答ありがとうございます。
すみませんおっしゃるとおりでした。
正常な動作です。

Updated by okkez (okkez _) over 11 years ago

  • Status changed from Open to Rejected

正常な動作ということなので rejected にしますね。

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0