[#43970] 次の1.8.6 — Urabe Shyouhei <shyouhei@...>
卜部です。
8 messages
2007/09/01
[#43980] MacOS X で irb が走らない — "Hideo Konami" <konami@...>
小波です。
9 messages
2007/09/02
[#43987] オンラインマニュアル→[最近の更新] →「Sort alphabetically] — take_tk <ggb03124@...>
たけ(tk)です
6 messages
2007/09/03
[#43988] Re: オンラインマニュアル→[最近の更新] →「Sort alphabetically]
— SATOH Fumiyasu <fumiyas@...>
2007/09/03
At Mon, 3 Sep 2007 15:37:29 +0900,
[#43996] ある日付の最終時刻の求め方 (秒単位) — SATOH Fumiyasu <fumiyas@...>
さとうふみやす @ OSS テクノロジです。
14 messages
2007/09/05
[#43998] Re: ある日付の最終時刻の求め方 (秒単位)
— "GOTO Kentaro" <gotoken@...>
2007/09/05
07/09/05 に SATOH Fumiyasu<fumiyas@osstech.jp> さんは書きました:
[#44000] Re: ある日付の最終時刻の求め方 (秒単位)
— Urabe Shyouhei <shyouhei@...>
2007/09/05
GOTO Kentaro wrote:
[#44025] iconvの多言語対応状況に関する質問 — "S_Konno(今野 滋)" <sk@...>
今野です。お世話になっております。
5 messages
2007/09/13
[#44032] rubyインストールガイドMacOSX更新しました⇒MacPortsでのrubyインストール:Tkを有効に — "S_Konno(今野 滋)" <sk@...>
今野です。お世話になっております。
4 messages
2007/09/15
[#44037] スコープについての質問 — "142QN4969@..." <ohrsts@...>
小原です。御世話になっています。
6 messages
2007/09/16
[#44044] ApacheでVirtual hostを使わない設定でRailsを動かしたい — "paptimusx scirocco" <paptimusx@...>
ApacheでVirtual hostを使わない設定でRailsを動かしたいのですが、
4 messages
2007/09/20
[ruby-list:44039] Re: スコープについての質問
From:
松房 一郎 <adj41380@...>
Date:
2007-09-17 00:34:46 UTC
List:
ruby-list #44039
スコープと、メソッド呼び出しの引数処理、それからメソッドの戻
り値が絡み合っていますね。
まずはなぜそうなるのかの説明
1.メソッド定義内部は独立したスコープになるので外部と同名の
変数があっても無関係
したがって、hidukeメソッドでのtodayへの代入は外部ローカルの
todayには影響しない。
リファレンスマニュアルの 「Rubyの落とし穴、trap::スコープ、
制御構造」に記載があります。
2. メソッド呼び出しの仮引数は、呼び出し時にメソッド定義の
引数に代入されるだけで、メソッド内部での代入は仮引数を変更す
ることはない。
ただし、代入されたオブジェクト自身を変更することは可能でその
効果は仮引数に代入されているオブジェクトにもおよぶ(なぜなら
オブジェクトは同一のものだから)。
なので set メソッドは期待したように働く
> ary=[];set(ary); p ary # => ["070901"]
3. hidukeの最後の式がたまたま hiduke内部のtodayへの代入で
あるためにhiddukeメソッドの戻り値が内部のtoday(=入力した文
字)になっている。
> today="0";hiduke(today) → today=hiduke(today)
> とすると "070901" 表示されますが、
today= hiduke(today) で入力文字がhidukeメソッドから戻り、外
部ローカルのtodayへそれが代入されて、入力値がtodayに反映され
ています。
で、メソッドに渡したオブジェクトを変更したいなら次の2つの方
法が定石だと思います。
(外部からデータ入力する部分は本質ではないので省略して、固定
値を戻すサンプルを示します)
1) 渡されたオブジェクトをメソッド内部で変更する
def hiduke(arg); arg.replace("070901"); end
today= "0"; hiduke(today); p today # => "070901"
2) メソッドにブロックを渡す
def hiduke; yield "070901"; end
today= "0";
hiduke { |date| today= date }; p today # => "070901"
142QN4969@plala.or.jp さんは書きました, (2007/09/17 4:23):
> 小原です。御世話になっています。
>
> わたしの環境は OS=vine linux 3.0
> ruby 1.8.2 (2004-11-03) [i386-linux] です。
>
> 次のスクリプトと、その実行結果がなぜそうなるのか、
> 理解できません。
>
以下省略