From: Sinichiro Dezawa Date: 1996-12-26T17:59:11+09:00 Subject: [ruby-list:1521] Re: C++¥桼¥¶ ¤Τ¿¤á¤μê°ú (Ver. 0.1.1) 出沢です > |メソッド > | 2 *name という形の argmentをつかって不定数のパラメータを渡せる。 > 2' name=exprで省略可能なパラメータを指定できる んー、これでは私には理解不能になってしまう。ああ、省略可能な引数宣言の ことですね、これは 》From: matz@caelum.co.jp (Yukihiro Matsumoto) 》Subject: [ruby-list:1515] Re: C++ユーザのための手引(Ver. 0.1.1) 》Date: Thu, 26 Dec 96 01:26:52 JST で言われてるように、C++ にもあるので、書かなくて良いかと思ったのですが。 ここでは def 識別子 [`(' [arg ['=' default]]...[`,' `*' arg ]`)'] ^^^^^^^^^^^^^^<--- こ言いたかったのです。 マニュアルの言葉の方が判り易いかな。 2 不定数のパラメータ C++と同じように省略可能なパラメータを指定できます。(arg = default ) rubyにだけある機能として、一番最後の仮引数の直前に*がある場合に 残りの実引数はみな配列としてこの引数に格納されます > > |代入演算の注意 > | 1 代入の時、C++ は右辺が左辺の型に変換される。 > | ruby は左辺が右辺の型に変わる。 > > ちょっと誤解.rubyには変数に型がありません.代入が行われると > 前の値に関係なく左辺の値(オブジェクト)が代入されます.型変換 > などは一切行われません(もともと変数に型がないから変換しよう > がない). ここどのように書こうか迷ったのです。 C++、smalltalk などでは代入のとき型変換されます。 ruby には型がないのだけど、私自身がrubyの初期 右辺が左辺の型に 変換されるという錯覚を持っていたので、そうじゃないよって 伝えるには何か書いて置きたいとおもってます。 1 代入の時、C++ は右辺が左辺の型に変換されて代入される。 ruby は左辺の前の状態は忘れられ、右辺の型(あるクラスのオブジェクト)に 置き換えられる。 ーーーーー さて > | 2 Array への代入は、オブジェクトのポインタの代入である。 > | 代入された方の Array を変更すると、元の方も変わる。 > | copy が必要なときは、dupメソッド を用いる > Arrayに限らず全ての代入は参照の代入であり,オブジェクトの状 > 態を変更するとみんな変わります.明示的なコピーはcloneを使い > ます.あ,ほとんどの場合はdupでも全く同じ意味です. ですが。 > | 4 引数は 値渡しではなくアドレス渡し。 > | つまり、値を変更すると呼出側の値も変わります。 > これは間違い.rubyには値渡ししかなく引き数として与えられた変 > 数の値を変えても元の式の値は変わりません.ただし,オブジェク > トの参照が渡るので値に対して破壊的な操作は可能です. も同じ範疇と考えていいですか? オブジェクト参照の代入/オブジェクト参照が渡される というのは C++ 的な表現でC++な人に説明する場合、 ポインタ の代入/ポインタが渡される と表現してはまずい点がありますか? んー、、、 ポインタを使う事で理解し易いような表現ができるとおもうが それで間違いはありますか | s=1 | i=1 | f=1.1 | c = i + f + s | print c.type | -:4: undefined local variable or method `s' for main(Object) SunOS4.1.3 での ruby - version 0.99.4-961217 では発生しないで Float でした。 も一度家のLinuxしてみます。 >|この型変換の話はどの章でしょうか? > >Numeric.htmlにちょっと書いてありますが,それ以外は(先日の私 >のメイル以外は)文書化されていません. > ruby-man-0.99.4-jp にはないですね。ruby-man-961225 とりよせてみます。 ありゃ英語だ。でもやはり載ってないようですが、、、 ソースか、、、