[#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> さんは書きました:

[ruby-list:44038] Re: スコープについての質問

From: cuzic <cuzic@...>
Date: 2007-09-16 23:25:38 UTC
List: ruby-list #44038
cuzic です。

スコープというより、破壊的メソッドか非破壊的メソッドを使うかの問題です。

def hiduke(today)
print " 日付を西暦6桁で入力して下さい : "
today=gets.chomp
end

ではなく

def hiduke2(today)
  print " 日付を西暦6桁で入力して下さい : "
  today.replace gets.chomp
end

と実行すれば、hiduke2 メソッドの中で today オブジェクトの内容が破壊的に変更されます。
それは、String#replace が破壊的メソッドだからです。

この内容は、「たのしい Ruby 」という本の中でオブジェクトがメモリ上のどこを指し示していて
破壊的メソッドではどうなり、非破壊的メソッドではどうなるかということを
分かりやすい絵 で解説していたような覚えがあります。(あやふや)

ではでは。

07/09/17 に 142QN4969@plala.or.jp <ohrsts@lapis.plala.or.jp> さんは書きました:
>
> 小原です。御世話になっています。
>
> わたしの環境は OS=vine linux 3.0
>               ruby 1.8.2 (2004-11-03) [i386-linux] です。
>
> 次のスクリプトと、その実行結果がなぜそうなるのか、
> 理解できません。
>
> ----------------script----------------------
> #!/usr/bin/ruby
> def hiduke(today)
> print " 日付を西暦6桁で入力して下さい : "
> today=gets.chomp
> end
>
> def set(a)
> print " 日付を西暦6桁で入力して下さい : "
> a[0]=gets.chomp
> end
>
> #### main ####
> today="0";hiduke(today)
> puts today
>
> ary=[];set(ary)
> p ary
> ----------------script end-------------------
>
> -----------------実行結果---------------------
> [ohr@localhost ruby]$ ./x.rb
> 日付を西暦6桁で 入力して下さい : 070901
> "0"
> 日付を西暦6桁で 入力して下さい : 070901
> ["070901"]
> ----------------実行結果 end------------------
>
> puts today で
> "070901" と表示されるのを期待したのですが、、、。
>
> today="0";hiduke(today) → today=hiduke(today)
> とすると "070901" 表示されますが、
> 戻り値を使わない方法は、ないのでしょうか?
>
> [ruby-list:10976] スコープの範囲
> 以下のスレッドを通読したのですが、綾分かりしません。
>
> どなたか、教えていただけないでしょうか。
> あるいは、この点を解説した site でもいいのですが。
>
> 以上よろしくお願いします。
>
>
>
>
>
>
>
>
>
>
>
>
>

In This Thread