[#33732] 文字列の式展開について — Masao Mutoh <mutoh@...>

むとうです。

14 messages 2002/02/03
[#33733] Re: 文字列の式展開について — Tietew <tietew-ml-ruby-list@...> 2002/02/03

[#33745] Re: 文字列の式展開について — Masao Mutoh <mutoh@...> 2002/02/04

むとうです。

[#33746] Re: 文字列の式展開について — Take_tk <ggb03124@...> 2002/02/04

たけ(tk)です。

[#33762] WebDAV client — HIDAKA Takahiro <cv8t-hdk@...>

 ひだかです。

15 messages 2002/02/05

[#33793] 右辺の値なしでも実行可能? — "井上 浩一" <kyoui32@...>

井上です。

48 messages 2002/02/08
[#33794] Re: 右辺の値なしでも実行可能? — Tietew <tietew-ml-ruby-list@...> 2002/02/08

[#33797] 変数の宣言 — Yasuhiro Hayase <hayase@...> 2002/02/08

早瀬@大阪大学基礎工学部情報科学科 です。

[#33798] Re: 変数の宣言 — matz@... (Yukihiro Matsumoto) 2002/02/08

まつもと ゆきひろです

[#33839] Re: 変数の宣言 — Yasuhiro Hayase <hayase@...> 2002/02/11

早瀬@阪大です。

[#33840] Re: 変数の宣言 — Tanaka Akira <akr@...17n.org> 2002/02/11

In article <20020211224442.48d0e668.hayase@hcn.zaq.ne.jp>,

[#33841] Re: 変数の宣言 — nobu.nakada@... 2002/02/11

なかだです。

[#33845] Re: 変数の宣言 — shudo@... 2002/02/12

> > > あえて宣言文の途中で、代入前に変数の値を使った場合にエラーを出そうと思うと、

[#33847] スクリプト言語 (Re: 変数の宣言 ) — TAKAHASHI Masayoshi <maki@...> 2002/02/12

高橋征義です。

[#33850] Re: スクリプト言語 (Re: 変数の宣言 ) — Takaaki Tateishi <ttate@...> 2002/02/12

At Tue, 12 Feb 2002 13:27:58 +0900,

[#33871] Re: スクリプト言語 (Re: 変数の宣言 ) — TAKAHASHI Masayoshi <maki@...> 2002/02/12

Takaaki Tateishi <ttate@kt.jaist.ac.jp> wrote:

[#33795] Re: 右辺の値なしでも実行可能? — "井上 浩一" <kyoui32@...>

井上です。

13 messages 2002/02/08

[#33807] Re: 右辺の値なしでも実行可能? — "井上 浩一" <kyoui32@...>

井上です。

38 messages 2002/02/08
[#33824] Re: 右辺の値なしでも実行可能? — "jihg" <jihg@...> 2002/02/08

jihg です。新入りです。

[#33825] Re: 右辺の値なしでも実行可能? — Tanaka Akira <akr@...17n.org> 2002/02/08

In article <000001c1b0c1$04eca980$b7d08bcb@soteccomputer>,

[#33853] arguments for def [Re: 右辺の値なしでも実行可能? ] — Masaaki Sakano <mas@...> 2002/02/12

坂野 正明と申します。

[#33856] Re: arguments for def [Re: 右辺の値なしでも実行可能? ] — shukaku@... 2002/02/12

At Tue, 12 Feb 2002 19:14:03 +0900,

[#33867] Re: arguments for def [Re: 右辺の値なしでも実行可能? ] — Masaaki Sakano <mas@...> 2002/02/12

坂野 正明です。

[#33831] Re: 右辺の値なしでも実行可能? — "jihg" <jihg@...> 2002/02/09

> Pseudo-Simplicity(擬似単純性)

[#33846] quickml サーバ — Satoru Takabayashi <satoru@...>

高林と申します

22 messages 2002/02/12
[#34082] SlowML /Re: quickml サーバ — rubiben <ozaki@...> 2002/02/25

るびべん です:

[#34086] Re: SlowML /Re: quickml サーバ — matz@... (Yukihiro Matsumoto) 2002/02/26

まつもと ゆきひろです

[#34100] Re: SlowML /Re: quickml サーバ — rubiben <ozaki@...> 2002/02/27

るびべん です:

[#34117] SlowML 実装実験 /Re: quickml サーバ — rubiben <ozaki@...> 2002/02/27

るびべん です:

[#33966] 「たまてばこ」開発版が SecurityE rror — dellin <dellin@...>

dellinといいます。

17 messages 2002/02/18
[#33968] Re: 「たまてばこ」開発版が SecurityError — nobu.nakada@... 2002/02/18

なかだです。

[#33972] world writeable dir (Re: 「たまてばこ」開発版が SecurityError) — Kazuhiro NISHIYAMA <zn@...> 2002/02/18

西山和広です。

[#34053] 漢数字 -> 数 — TOYOFUKU Chikanobu <toyofuku@...>

豊福です。

18 messages 2002/02/25

[#34056] ruby-dev summary — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

16 messages 2002/02/25

[ruby-list:33911] [Summary]arguments for def

From: Masaaki Sakano <mas@...>
Date: 2002-02-13 17:58:49 UTC
List: ruby-list #33911
坂野 正明です。

At Wed, 13 Feb 2002 10:59:30 +0900,
shukaku@j-mac.co.jp wrote:
> > > lintのような別のツールで良ければ、rubyunitで検査するというのは有効
> > > だと思います。例のような場合なら、テストケースでひっかかりますから。

> とりあえずなんですが、下記のような感じでしょうか。

斉藤さん、丁寧な御返事をどうもありがとうございました。
お蔭様で(最低限の)使い方を理解できたように思います。

# あと、助田さんのWWWトップページから辿れる
# http://homepage1.nifty.com/markey/ruby/prc2k/rubyunit.html
# が分かりやすいということを見つけました。是非、RubyUnitのページ
# http://homepage1.nifty.com/markey/ruby/rubyunit/index.html
# からもリンクをお張り下さいな -> 助田さま

rubyunit は、クラス(やプログラム)の挙動を調べるもの、
つまり、プログラムの中に p やら if やら書き込んで調べる代わりに、
それを別ファイルに書いて扱うためのフレームワーク、というもの
だと理解しました。
# 実は直接 lint してくれるのか、と期待していたのですが…ちょっと
# 目的が違うようですね。
# とはいえ、rubyunit は使い手がありそうです。今後色々試してみます。


以下、今回の質問に関する Summary です。

#-------------------- Summary --------------------------

[Q]
 Ruby の def 文においては、引数の受渡しは、多重代入と大体同じ
 (違いは引数の数のミスマッチに関する厳しさだけ?)。よって、
 def文の中で、破壊的メソッドを使う時は要注意。引数にとった
 オブジェクトを誤って"破壊"しないためには、どうすればいいか?

 # なお、(私の理解が正しければ) Numeric, True/False/NilClass, Proc
 # クラスなどには破壊的メソッドは存在しないので、気にしなくてもいい。


[A1] (正当派?)

 defの内部で(引数で渡されたオブジェクトに対して)破壊的なメソッドを
 適用しない。

[A2] (名付け派?)

 (上と同じだが、誤らない工夫として)
 defの際に、引数の名前に"in_"とか"out_"とかを付ける。

[A3] (慎重派?)

 予想外のことが起こっていないか、しっかり、テストする。
 rubyunit などが有用。
 cf. http://homepage1.nifty.com/markey/ruby/rubyunit/

[A4] (自爆派?)

 def で受け取った引数に対し、ただちに .freeze する。誤って破壊的
 メソッドを適用すると、エラーが出るので、チェックできる。
 (長所)
   ・チェックが容易。
     おそらく、エラーメッセージから直ちに問題箇所を発見できる。
 (難点)
   ・複雑な分岐があると、チェック洩れの可能性あり(これは上[A3]と同じ)。
   ・一旦、.freeze すると、その解除はできない。
   ・freeze 自体が、オブジェクトの状態を(グローバルに)変更する。
     つまり、def を呼んだルーチンの方でも当然この変更が有効になる。
     かつ、解除できないから、しばしば困ることになるだろう。
   ・どちらにせよ、グローバルな状態を変更する def 文は、汎用的には
     なりにくいので、debug が終わって本番の時には、外すべきか。

[A5] (邪道派?)

  def で 引数を受け取った直後に、他の変数(もしくは自分自身)に .clone する。

  これを簡単に行うためには、例えば、以下のような方法。

  1. 以下の1行ファイル( clone.rb )を用意して、ライブラリパスに置く。
	def clone(*a) a.map{|i| i.clone} end
  2. ruby -rclone で clone.rb を require。
  3. def 文において、
	def xyz(a,b,*c)
	  (a,b,*c)=clone(a,b,*c)
	  ...
     などとして、最初に一気に引数を(同じ名前で) .clone する
     # Editor で括弧ごとコピーすればいいので、考えなくてよくて楽。

#-------------------- Summary ここまで --------------------------

In This Thread