機械です。
>| lambda無いし・・・(泣)
>
>lambdaありますよ、昔から。
申し訳ありません。
索引に無かったんで、見落としてました。
確かにありますね・・・えっと、Proc.newと同義です
ね。
でもコレって、Pythonのlambdaとえらく雰囲気違いま
すね・・・
※Schemeとかのlambdaとも違うなぁ・・・
例えばPythonだと、lambdaを用いて階乗計算(すみま
せんPythonブースの使いまわしです)を・・・
f = lambda x:(x and f(x-1)*x)or 1
とか書けるんですが、Rubyだとブロックの中からreturn
できませんから、lambdaを使ってこういう書き方は想定さ
れていませんね(まぁ、Pythonでもあまり推奨されていな
い書き方ですし・・・)
再帰だと・・・
def f(x)
if x == 0
return 1
else
return f(x-1) * 1
end
end
ですから、Pythonで書くと・・・
def f(x):
if x == 0:
return 1
else:
return f(x-1) * 1
といった感じでしょうか。
>| オブジェクトについては、C++もSmalltalkもJavaも一応は書けるので(何より
>Pythonですが)使いまくっていますが、Pythonの気楽なファジーオブジェクトにな
れ
>ると、制限の多い他のオブジェクトはいじるのが結構面倒です。
>
>Rubyも十分ファジーだと思うんだけど。
まぁ、オブジェクトフィールドを直接外から操作でき
たり、
def function():
return 100
class Class:
pass
x = function, Class
a, b = x[0](), x[1]()
みたいに、関数名はおろかクラス名まで無造作にオブ
ジェクトとして放り込んで使ったりするあたりは、ファ
ジーなオブジェクト指向というよりむしろLisp系のファー
ストクラスプロシージャまで混在した乱暴な設計ですの
で、これから比べれば、Rubyはやはりかなり「行儀の良
い」オブジェクト指向言語だと思います。
※Smalltalkでも、メッセージまではオブジェクトになら
なかった筈ですし・・・
実際、関数オブジェクトやクラスオブジェクトの存在
は、演算子をシンボルとして扱えるLispの抽象度に近く
なるということで、便利ではあるものの若干理解しにく
くなるという危険性を否めません。
ただ、ソレがあるプログラミング環境に自分の思考が
慣れきっているため、少しリハビリする必要があるよう
です。
/機械伯爵/