[#21157] あったらうれしいメソッド to_n, to_n!, to_s! — ogino@...

荻野です。あったらうれしいメソッドということで書いてみます。

16 messages 2000/03/03

[#21159] メソッドの入り口 — ogino@...

荻野です。もうひとつご指導ください。

93 messages 2000/03/03
[#21170] Re: メソッドの入り口 — Shin-ichiro Hara <sinara@...> 2000/03/03

原です。

[#21243] Re: メソッドの入り口 — keiju@... (石塚圭樹) 2000/03/07

けいじゅ@日本ラショナルソフトウェアです.

[#21247] Re: メソッドの入り口 — 中村暁史 Nakamura Akifumi <BXQ04723@...> 2000/03/07

[#21267] 引数コピーとオブジェクト指向 (Re: メソッドの入り口) — Hideto ISHIBASHI <s34204@...> 2000/03/08

石橋秀仁です。

[#21272] Re: 引数コピーとオブジェクト指向 (Re: メソッドの入り口 ) — 中村暁史 Nakamura Akifumi <BXQ04723@...> 2000/03/08

[#21276] Re: 引数コピーとオブジェクト指向 (Re: メソッドの入り口 ) — nobu.nakada@... 2000/03/09

なかだです。

[#21279] Re: 引数コピーとオブジェクト指向 (Re: メソッドの入り口 ) — ogino@... 2000/03/09

oop未満の世界観の荻野です。

[#21282] Re: 引数コピーとオブジェクト指向 — Tomoyuki Kosimizu <greentea@...2.so-net.ne.jp> 2000/03/09

越水です。

[#21285] Re: 引数コピーとオブジェクト指向 — ogino@... 2000/03/10

荻野です。

[#21293] Re: 引数コピーとオブジェクト指向 — Matsuo Hisanori <hisanori@...> 2000/03/10

松尾です。

[#21297] Re: 引数コピーとオブジェクト指向 — ogino@... 2000/03/10

荻野です。

[#21302] Re: 引数コピーとオブジェクト指向 — 土岐 仁謙 <toki@...> 2000/03/10

土岐です。

[#21371] Re: 引数コピーとオブジェクト指向 — Matsuo Hisanori <hisanori@...> 2000/03/13

松尾です。

[#21374] Re: 引数コピーとオブジェクト指向 — TADA Tadashi <sho@...> 2000/03/13

ただただしです。

[#21365] Re: 引数コピーとオブジェクト指向 — Matsuo Hisanori <hisanori@...> 2000/03/13

松尾です。

[#21280] raise non-Exception object — Kenichi Komiya <kom@...3.rim.or.jp>

24 messages 2000/03/09
[#21283] Re: raise non-Exception object — nobu.nakada@... 2000/03/09

なかだです。

[#21315] Re: raise non-Exception object — Kenichi Komiya <kom@...3.rim.or.jp> 2000/03/11

[#21342] Re: raise non-Exception object — nobu.nakada@... 2000/03/12

なかだです。

[#21384] ruby 1.4.4 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

35 messages 2000/03/13

[#21442] 配列内のソート — Takayuki Tanaka <tanaka@...>

こんにちは Tanです。

16 messages 2000/03/15

[#21583] ruby for Web — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

27 messages 2000/03/22
[#21584] Re: ruby for Web — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/03/22

なひです.

[#21649] net-1.1.10 — TAKAHASHI Masayoshi <maki@...>

高橋征義です。net/http 使いたおし中。

17 messages 2000/03/27

[#21669] new version of mod_ruby & eRuby — Shugo Maeda <shugo@...>

前田です。

14 messages 2000/03/28

[ruby-list:21422] Re: 引数コピーとオブジェクト指向

From: Hideto ISHIBASHI <s34204@...>
Date: 2000-03-14 11:28:37 UTC
List: ruby-list #21422
石橋秀仁です。

> ただただしです。

>  ところでこんなのはどうでしょう。これならドキュメントに「nameはあらか
> じめfreezeさせておけ」と書いくことで注意を促せて、さらに間違いも防げま
> す。呼び出し側に責任を持たせつつ、いつ書き換えられるかビクビクする必要
> もない。「値」になりきれないRubyのStringを、極力「値」として扱う工夫で
> す:

いいっす!`freeze'こそが「dup問題」解決の決定版だと思います。

じつは議論の最初から、
 * Java の String / StringBuffer
 * C++  の void test( const String& str );
みたいなのがあれば、そもそも「dup論議」は無かっただろうと思っていました。

これからは次のようなクラスを使うつもりです。

require 'delegate'

class ConstantString < DelegateClass(String)
  def initialize( string )
    super
    freeze
  end
end

name = ConstantString.new( 'john' )  #=>"john"
#name.sub!( 'oh', 'ea' )             #=>TypeError: can't modify frozen string

other = String.new( name )           #=>"john"
other.concat( 'son' )                #=>"johnson"

# こうなるとやはり、`String#unfreeze'は不要です。むしろ、あってはいけない。


そもそも「dup論議」は、RubyのStringの特殊性に起因するようです。
  「Stringの変更権問題」を解決して、String#dupを使わない
というのが結論ではないでしょうか?


また、String#freezeを使って文字列を管理するなら、
  非破壊的メソッドは不要
ですね。

つまり、"String#sub/sub!"を使うなら
  a = String.new(...); a.freeze; b = a.sub(...);
より、
  a = String.new(...); a.freeze; b = a.dup; b.sub!(...);
と明示的にコピーしたほうが「安全」だと思います。この「安全」とは、
「人間同士のコミュニケーションにおける誤解を防ぐ」、という意味です。

これなら、Cの「値渡し」のような、「渡したオブジェクトを勝手に
破壊されなくて安心」、という意味での「安全」にこだわる必要もない。
もっとオブジェクト指向なスクリプトが書きやすくなりますよね。

--
"Make your Ruby scripts object-oriented!"
Hideto "rubyholic" ISHIBASHI

In This Thread