[#9445] thread.rb — m_seki@...

18 messages 2000/03/16
[#9446] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/17

[#9460] Re: thread.rb — m_seki@... 2000/03/21

[#9462] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/21

まつもと ゆきひろです

[#11281] Re: thread.rb — Masatoshi SEKI <m_seki@...> 2000/10/22

[#9498] timeout しない timeout — ARIMA Yasuhiro <fit0298@...>

有馬です。

20 messages 2000/03/26
[#9506] Re: timeout しない timeout — matz@... (Yukihiro Matsumoto) 2000/03/27

まつもと ゆきひろです

[#9509] Re: timeout しない timeout — gotoken@... (GOTO Kentaro) 2000/03/27

In message "[ruby-dev:9506] Re: timeout しない timeout"

[ruby-dev:9349] Re: 代入

From: Koji Arai <JCA02266@...>
Date: 2000-03-02 17:12:23 UTC
List: ruby-dev #9349
新井です。

>>> From: ta-ka-si@blue.auc.co.jp
>>> Date: Wed, 1 Mar 2000 09:39:56 +0900
>>> Subject: [ruby-dev:9329] Re: 代入

> よくアルゴリズムの例にあるような、左辺に式を書き、右辺に
> 左辺値が来るという書式をRubyでサポートする、ということです。

お遊びで、ちょっとやってみました。ちゃんと検証してないけれど
パッチを添付します。

ただ、ちょっと使って見た感想としては

> 1 -> foo
> foo + 1 -> foo

というのは、多少見難いように思いました。

ある程度の規模のソースをざっと眺めるときに視線が左側寄りで、
縦に読み進める癖があるのかも知れません。

# もしかしたら、長いメソッドチェーンが嫌いな理由はこれかも。
# 横向きに処理をしっかり追って行かないと処理内容が見えない。

慣れの問題か、勘違いかのどちらかでしょうけど。


--- parse.y.org	Sun Feb 20 22:33:47 2000
+++ parse.y	Wed Mar  1 10:35:21 2000
@@ -201,6 +201,7 @@
 %token tCOLON2		/* :: */
 %token tCOLON3		/* :: at EXPR_BEG */
 %token <id> tOP_ASGN	/* +=, -=  etc. */
+%token tOP_ASGN2	/* -> */
 %token tASSOC		/* => */
 %token tLPAREN		/* ( */
 %token tLBRACK		/* [ */
@@ -219,7 +220,7 @@
 %left  kOR kAND
 %right kNOT
 %nonassoc kDEFINED
-%right '=' tOP_ASGN
+%right '=' tOP_ASGN tOP_ASGN2
 %right '?' ':'
 %nonassoc tDOT2 tDOT3
 %left  tOROP
@@ -638,6 +639,11 @@
 			value_expr($3);
 			$$ = node_assign($1, $3);
 		    }
+		| arg tOP_ASGN2 lhs
+		    {
+			value_expr($1);
+			$$ = node_assign($3, $1);
+		    }
 		| variable tOP_ASGN {$$ = assignable($1, 0);} arg
 		    {
 			if ($2 == tOROP) {
@@ -2930,6 +2936,10 @@
 	    lex_state = EXPR_BEG;
 	    yylval.id = '-';
 	    return tOP_ASGN;
+	}
+	if (c == '>') {
+	    lex_state = EXPR_BEG;
+	    return tOP_ASGN2;
 	}
 	if (lex_state == EXPR_BEG || lex_state == EXPR_MID ||
 	    (lex_state == EXPR_ARG && space_seen && !ISSPACE(c))) {

In This Thread