ab.com コミュニティ
https://www.activebasic.com/forum/

標準では未定義の演算子の導入に関する提案
https://www.activebasic.com/forum/viewtopic.php?t=1935
ページ 11

作成者:  konisi [ 2007年5月08日(火) 00:02 ]
記事の件名:  標準では未定義の演算子の導入に関する提案

下のような、演算子の追加定義方法を思いついたんですが、どうでしょうか?

定義の書式

Sub/Function Operator "NewOperatorName" (...) [As ...] {[priority:"OldOperatorName"],[unit:Direction]}

NewOperatorName ・・・演算子の名前
OldOperatorName・・・演算の優先順位が等価である演算子の名前。省略時:As(例)
Direction・・・演算子の結合性。値:LEFT,RIGHT 省略時:LEFT(例)
OldOperatorNameが代入演算子系の場合は必ず省略or無視(例)

例(これだけだと導入するだけ無駄に見えるが、応用範囲はかなり広いであろう。)
コード:
Class Foo
Public
    a As Long

    Sub Operator "addto" (foo As Foo) {priority:"+="}
        a += foo.a
    End Sub
End Class

#console

Dim A As Foo,B As Foo
A.a=1
B.a=3
A addto B

Print A.a
Sleep(10000)
例2
コード:
Class Foo
Public
    x As Double
    y As Double

    Sub Operator "span" (cita As Double) {priority:"*="}
        Dim sx As Double,sy As Double
        Dim x2 As Double,y2 As Double
        cita*=Math.PI()/180
        sx=Math.Cos(cita)
        sy=Math.Sin(cita)
        x2=x*sx-y*sy
        y2=x*sy+y*sx
        x=x2
        y=y2
    End Sub
End Class

#console

Dim A As Foo
A.x=1
A.y=0
A span 45
Print A.x
Print A.y
Sleep(10000)
例とかは今手打ちで書いたのでおかしいところもあると思います。指摘してやってください。

作成者:  tak [ 2007年5月08日(火) 00:12 ]
記事の件名: 

新しい種類の演算子の定義は、コンセプトとしては有用なものであることは認めます。
ただそれを実装するのにどれだけ手間がかかるか想像してみてください。

もちろんコンパイラを制作しているのは山本さんなので、山本さんが出来ると仰れば反対する理由はありませんが。

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/