無理矢理オブジェクト指向

なんちゃって複素数クラスを考えてみた

使用例

Complexクラスのインスタンス1+2iを生成してcに代入

$ Complex 1 2 > c
$ chmod +x c

オブジェクトcに実部、虚部、文字列表現を質問してみる

$ c real
1
$ c image
2
$ c toString
1+2i

cとcを足し算させてみる。
ちょっとかっこわるいけどメソッドをチェインさせるときは|_で繋ぐ。

$ c add c |_ toString
2+4i
$ c add c |_ add c |_ image
6

インスタンス生成直後にメソッドを呼ぶ

$ Complex 3 4 |_ toString
3+4i
$ Complex 3 4 |_ add c |_ toString
4+6i

舞台裏

Complexの中身は以下の通り

#!/bin/sh
cat <<FIELD
#!/bin/sh
R=$1
I=$2
FIELD
cat <<'METHOD'
case $1 in
real)     echo $R ;;
image)    echo $I ;;
toString) echo $R+${I}i ;;
add)      Complx $((R+`$2 real`)) $((I+`$2 image`)) ;;
*)        cat $0 ;;
esac
METHOD

その他事前の仕込み。
こういう変態的な設定はサブシェル内にとどめておく。

$ bash
$ PATH=$PATH:.
$ alias _='sh -s'
$ chmod +x Complex

普通、ファイルの新規作成時はファイルの実行ビット (eXecute) は立てないので、umask が 022 ということは、666 から 022 を引いた 644 というパーミッションで新規ファイルが作られることになる。

http://x68000.q-e-d.net/~68user/unix/pickup?umask

最初から実行ビットの立ったファイルを作成するようにしようとしたが、umaskで0を指定してもマスク前の値は777ではなくて666なのでダメだった。