[#42672] [Ruby 1.9-Bug#4110][Open] ホスト名の先頭が数字であるとき、WEBrickのテストでErrorが出る — Kouhei Yanagita <redmine@...>
Bug #4110: =E3=83=9B=E3=82=B9=E3=83=88=E5=90=8D=E3=81=AE=E5=85=88=E9=A0=AD=
[#42684] [Ruby 1.9-Bug#4120][Assigned] 2 failures on test/mkmf/test_convertible.rb — Usaku NAKAMURA <redmine@...>
Bug #4120: 2 failures on test/mkmf/test_convertible.rb
なかだです。
こんにちは、なかむら(う)です。
[#42692] [Feature: trunk] String#encode(:fallback) should accept default handler — SASADA Koichi <ko1@...>
ささだです.
[#42701] 1.9.x release and trunk branch policy — Yusuke ENDOH <mame@...>
まつもとさん、Yugui さん
[#42730] [Ruby 1.9-Bug#4143][Open] warning: "SUPPORT_JOKE" is not defined — Kazuhiro NISHIYAMA <redmine@...>
Bug #4143: warning: "SUPPORT_JOKE" is not defined
チケット #4143 が更新されました。 (by Kazuhiro NISHIYAMA)
2010年12月10日22:38 Kazuhiro NISHIYAMA <redmine@ruby-lang.org>:
(2010/12/10 23:49), KOSAKI Motohiro wrote:
[#42735] [Ruby 1.9-Feature#4147][Open] Array#sample で重みを指定したい — Yoji Ojima <redmine@...>
Feature #4147: Array#sample で重みを指定したい
チケット #4147 が更新されました。 (by Shyouhei Urabe)
> じゃあ反対ないので実装はともかく、この仕様は基本入れる方向で考えましょう。反対の人は意思表示お早めに。
Yuguiです。
2010年12月19日21:15 Yugui <yugui@yugui.jp>:
チケット #4147 が更新されました。 (by Yoji Ojima)
遠藤です。
チケット #4147 が更新されました。 (by Yoji Ojima)
[#42758] [Ruby 1.9-Bug#4157][Open] test_pty で、たまに出る Failure — Makoto Kishimoto <redmine@...>
Bug #4157: test_pty で、たまに出る Failure
[#42763] [Ruby 1.9-Bug#4159][Open] test_block_variables(TestRipper::ParserEvents) が失敗する — Kouhei Yanagita <redmine@...>
Bug #4159: test_block_variables(TestRipper::ParserEvents) が失敗する
[#42778] BasicObject#object_id — keiju@... (Keiju ISHITSUKA)
けいじゅ@いしつかです.
[#42782] [Ruby 1.9-Feature#4165][Open] win32ビルドでbaserubyを設定しなかったときのエラーが非常に不親切 — Motohiro KOSAKI <redmine@...>
Feature #4165: win32=E3=83=93=E3=83=AB=E3=83=89=E3=81=A7baseruby=E3=82=92=
[#42832] [Ruby 1.9-Bug#4178][Open] test/rubygems/gemutilities.rb で、よくわからない ArgumentError — Makoto Kishimoto <redmine@...>
Bug #4178: test/rubygems/gemutilities.rb で、よくわからない ArgumentError
[#42869] [feature:trunk] option for Socket#sendmsg — Nobuyoshi Nakada <nobu@...>
なかだです。
2010年12月23日21:01 Nobuyoshi Nakada <nobu@ruby-lang.org>:
[#42887] [Ruby 1.9-Feature#4204][Open] IO#advise should raise error for unknown symbol — Tomoyuki Chikanaga <redmine@...>
Feature #4204: IO#advise should raise error for unknown symbol
[#42893] [Ruby 1.8-Bug#4206][Open] failed to set ext option for win32/configure.bat — Akio Tajima <redmine@...>
Bug #4206: failed to set ext option for win32/configure.bat
[#42894] [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Shyouhei Urabe <redmine@...>
Feature #4207: これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには
むらたです。
むらたです。
2011/1/5 Kenta Murata <muraken@gmail.com>:
こんにちは、なかむら(う)です。
チケット #4207 が更新されました。 (by Shyouhei Urabe)
チケット #4207 が更新されました。 (by Akinori MUSHA)
[ruby-dev:42787] Re: [Ruby 1.9-Feature#4146][Open] Improvement of Symbol and Proc
なかだです。
At Sat, 11 Dec 2010 10:31:10 +0900,
SASADA Koichi wrote in [ruby-dev:42750]::
>> 現在Symbol#to_procで %w[12 45 32].map(&:to_i) のようなことはできますが、
>> 引数を付けてメソッドを呼ぶことはできません。Symbolリテラルに引数を付け
>> たらその引数と共にメソッドを呼ぶProcを作る構文というのはどうでしょうか。
>>
>> %w[12 45 32].map(&:to_i(9)).map(&:*(2)) #=> [22, 82, 58]
>> %w[abc def ghi].map(&:[1]) #=> ["b", "e", "h"]
>
> メソッドだと,やっぱり書くのがめんどいっすかね?
Symbol#callを定義すれば、こうは書けますが
p %w[12 45 32].map(&:to_i.(9)).map(&:*.(2))
p %w[abc def ghi].map(&:[].(1))
> method_missing を使うのはこんな感じでしょうか.
いずれにせよ引数はProcの作成前に決定されて固定されています。
map(&:to_i.(9))とmap{|_|_.to_i.(9)}は等価ではありません。
> 新しい文法を考えるのなら,& に対するメソッド呼び出しを,Proc 生成へ変
> 換するってのはあるかもしれない.
>
> p %w[12 45 32].map(&.to_i(9)).map(& * 2)
> p %w[abc def ghi].map(&[1])
> #=>
> p %w[12 45 32].map(&lambda{|recv| recv.to_i(9)}).map(&lambda{|recv| recv
> * 2})
> p %w[abc def ghi].map(&lambda{|recv| recv[1]})
単項演算子とかぶる+,-やリテラルとかぶる%,/,[]などはこの構文でも無理です
が、これでもいいかも。
diff --git i/parse.y w/parse.y
index f2a556a..bd615e5 100644
--- i/parse.y
+++ w/parse.y
@@ -401,6 +401,9 @@ static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
static ID *local_tbl_gen(struct parser_params*);
#define local_tbl() local_tbl_gen(parser)
+static NODE *symbol_lambda_gen(struct parser_params *, ID, NODE *);
+#define symbol_lambda(mid, args) symbol_lambda_gen(parser, mid, args)
+
static void fixup_nodes(NODE **);
extern int rb_dvar_defined(ID);
@@ -2474,6 +2477,27 @@ block_arg : tAMPER arg_value
$$ = $2;
%*/
}
+ | tAMPER '.' {$<num>$ = ruby_sourceline;}
+ operation2 opt_paren_args
+ {
+ /*%%%*/
+ $$ = symbol_lambda($4, $5);
+ nd_set_line($$, $<num>3);
+ $$ = NEW_BLOCK_PASS($$);
+ /*%
+ $$ = dispatch3(lambda, $4, $5);
+ %*/
+ }
+ | tAMPER '.' {$<num>$ = ruby_sourceline;} '[' aref_args ']'
+ {
+ /*%%%*/
+ $$ = symbol_lambda(tAREF, $5);
+ nd_set_line($$, $<num>3);
+ $$ = NEW_BLOCK_PASS($$);
+ /*%
+ $$ = dispatch3(lambda, tAREF, $5);
+ %*/
+ }
;
opt_block_arg : ',' block_arg
@@ -8387,6 +8411,19 @@ arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
}
static NODE *
+symbol_lambda_gen(struct parser_params *parser, ID mid, NODE *args)
+{
+ const struct vtable *vars = dyna_push();
+ ID tid = internal_id();
+ NODE *lambda = NEW_LAMBDA(0);
+ arg_var(tid);
+ lambda->nd_body = NEW_SCOPE(new_args(NEW_ARGS_AUX(tid, 1), 0, 0, 0, 0),
+ NEW_CALL(NEW_DVAR(tid), mid, args));
+ dyna_pop(vars);
+ return lambda;
+}
+
+static NODE *
splat_array(NODE* node)
{
if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
diff --git i/test/ruby/test_symbol.rb w/test/ruby/test_symbol.rb
index 9061f19..443885d 100644
--- i/test/ruby/test_symbol.rb
+++ w/test/ruby/test_symbol.rb
@@ -88,6 +88,10 @@ class TestSymbol < Test::Unit::TestCase
ary_ids = ary.collect{|x| x.object_id }
assert_equal ary_ids, ary.collect(&:object_id)
end
+
+ assert_equal [2, 4, 6], (1..3).map(&.*(2))
+ assert_equal %w(b e h), %w[abc def ghi].map(&.[1])
+ assert_equal [11, 41, 29], %w[12 45 32].map(&.to_i(9))
end
def test_call
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦