[SML 7523] 座標のストリーム出力(aPoint printOn: aStream)
AOKI Atsushi
atsushi @ cc.kyoto-su.ac.jp
2009年 4月 30日 (木) 20:47:48 JST
再度、ポストします。小さな画像を添付したのが原因か、午前中に
下記のメールをポストしたのだけれど、配送されないようなので。
画像が無くとも大丈夫でしょう。
--- 青木淳@京都宇治
-------- Original Message --------
Subject: 座標のストリーム出力(aPoint printOn: aStream)
Date: Thu, 30 Apr 2009 10:57:08 +0900
From: AOKI Atsushi <atsushi @ cc.kyoto-su.ac.jp>
To: Smalltalkers' Salon Mailing List <sml @ smalltalk.jp>
こんにちは、青木淳@京都上賀茂です。
座標(Point)のストリームへの出力 (printOn: aStream)ですが、
いままでは以下のようになっていました。
printOn: aStream
"Append to the argument aStream in terms of infix notation."
x printOn: aStream.
aStream nextPut: $@.
y printOn: aStream
二項メッセージのセレクタとの関係で曖昧(あやふや)なところが
ありましたよね。
たとえば、y 座標が負数だったとき、@ の直後にマイナスが続くた
め、100 @ -200 となってしまいます。
これでは、100 @ -200 なのか、100 @- 200 なのか、判然としない
でしょ。(いままででは、LL(1) でやることができずに、この場合
に限って LR(1) もどきに遂行して、無理矢理に 100 @ -200 と解釈
していたのです。)
で、これからは Point の printOn: aStream は以下のようになり、
printOn: aStream
"Append to the argument aStream in terms of infix notation."
x printOn: aStream.
aStream nextPutAll: ' @ '.
y printOn: aStream
必ず @ の前後にスペースが入ります。これからは形式を改めて書き
なさいね!ということです。フォーマッタにかけていれば大丈夫。
新しい Smalltalk(おそらく VisualWorks 7.7 以降)では、y 座標
がマイナスのときに、@ の後ろにスペースを空けないと、エラーに
なっちゃいますので、気をつけてくださいませ。
参考のため、100 @ -200 を評価(Do it)した際に出現する例外ウィ
ンドウの画像を添えておきます。@- という二項メッセージセレクタ
がわからないよ!と言われるんです。
同様に、100,-200 と書いて、じゅん for Smalltalk の二次元座標
を得ようとしても、,- がわからないよ!と言われます。
Smalltalk コンパイラの字句解析や構文解析に無理矢理なところが
なくなって良くなったと私は思います。
------------------------------------------------------------
AOKI Atsushi http://www.cc.kyoto-su.ac.jp/~atsushi/
SML メーリングリストの案内