[#45298] グローバルにdefしたメソッドのスコープ — "takeru sasaki" <sasaki.takeru@...>
佐々木と申します。
10 messages
2008/08/06
[#45299] Re: グローバルにdefしたメソッドのスコープ
— rubikitch@...
2008/08/06
From: "takeru sasaki" <sasaki.takeru@gmail.com>
[#45318] Windows コマンドプロンプトで UTF-8を出力するには — Yuumi Yoshida <yuumi3@...>
おつかれさまです、 Yuumi3です。
11 messages
2008/08/08
[#45323] Re: Windows コマンドプロンプトで UTF-8を出力するには
— Yuumi Yoshida <yuumi3@...>
2008/08/08
こんばんは、Yuumi3です。
[#45324] tracer の出力が1.8,1.9では異なる。 — Kouya <kouyataifu4@...>
こんにちは、kouya です。
6 messages
2008/08/09
[#45334] def meth(*args, &block) の「*」「&」の呼び名は? — take_tk <ggb03124@...>
たけ(tk)です。
5 messages
2008/08/10
[#45345] 「サポートレベル」の定義、1.9.1のサポート予定プラットフォーム、メンテナ募集 — "Yugui (Yuki Sonoda)" <yugui@...>
Yuguiです。
4 messages
2008/08/13
[#45356] nil.size — "ARAI Shunichi" <arai@...>
こんにちは、Rubyist九州の新井です。
9 messages
2008/08/19
[#45365] cygwinでRabyが動作しない。 — Kura syuu <kurasyuu@...>
初めまして 蔵修と申します。
11 messages
2008/08/22
[#45379] Design Patterns in Ruby — あひる <ahirusan@...>
あひる@Ducksysです。はじめまして。
5 messages
2008/08/23
[#45387] OpenSSL::CipherでのDESのやり方 — "Hideo Yamamoto" <deoohi@...>
はじめまして、山本と申します。
6 messages
2008/08/25
[#45393] JRubyについて&rubygemについて&RDTについて — Akira Hayakawa <ruby@...>
夜分遅くすいません。Akiraと申します。
10 messages
2008/08/25
[#45396] Re: JRubyについて&rubygemについて&RDTについて
— rubikitch@...
2008/08/25
From: Akira Hayakawa <ruby@i-mail.jp>
[#45397] Re: JRubyについて&rubygemについて&RDTについて
— Akira Hayakawa <ruby@...>
2008/08/25
ありがとうございます。
[#45398] Re: JRubyについて&rubygemについて&RDTについて
— rubikitch@...
2008/08/25
From: Akira Hayakawa <ruby@i-mail.jp>
[#45399] Re: JRubyについて&rubygemについて&RDTについて
— Akira Hayakawa <ruby@...>
2008/08/25
On Tue, 26 Aug 2008 08:27:24 +0900
[#45400] Re: JRubyについて&rubygemについて&RDTについて
— rubikitch@...
2008/08/26
From: Akira Hayakawa <ruby@i-mail.jp>
[#45406] Ruby1.9のインストールに失敗しました — Akira Hayakawa <ruby@...>
環境はUbuntu Linuxです。
7 messages
2008/08/27
[#45414] This is TestMail (テストメール) — "masataka kobayashi" <hotopoppo1@...>
I'm sorry . This is Test Mail
5 messages
2008/08/28
[#45427] Dir[] with **/ — Nobuhiro IMAI <nov@...>
いまいです。
8 messages
2008/08/29
[#45438] assert_equalの挙動について — Akira Hayakawa <ruby@...>
こんばんわ。Akiraです。
7 messages
2008/08/30
[#45447] sudo: gem: command not found — Akira Hayakawa <ruby@...>
EclipseのRDTはバグが多すぎて、DLTKはまだ開発途中
7 messages
2008/08/31
[#45448] Re: sudo: gem: command not found
— rubikitch@...
2008/08/31
From: Akira Hayakawa <ruby@i-mail.jp>
[#45449] やっぱりrubygemの仕組みがいまいち分かりません — Akira Hayakawa <ruby@...>
初期条件として、
8 messages
2008/08/31
[#45451] Re: やっぱりrubygemの仕組みがいまいち分かりません
— rubikitch@...
2008/08/31
From: Akira Hayakawa <ruby@i-mail.jp>
[#45454] Re: やっぱりrubygemの仕組みがいまいち分かりません
— Akira Hayakawa <ruby@...>
2008/08/31
On Sun, 31 Aug 2008 13:16:54 +0900
[ruby-list:45431] cloneの挙動について
From:
Akira Hayakawa <ruby@...>
Date:
2008-08-29 23:55:29 UTC
List:
ruby-list #45431
おはようございます。Akiraです。
cloneについて質問があります。
Javaでは、cloneはObjectでprotectedで定義されていて、
サブクラスでオーバーライドする必要があったと思いますが、
http://java.sun.com/javase/ja/6/docs/ja/api/
Rubyはどうなのだろうと思って、以下のコードを試しました。
class Name
attr_accessor :name
def initialize(name)
@name = name
end
end
class Man
attr_writer :name
def initialize(name)
@name = name
end
def get_name
return @name.clone
end
end
a = Man.new(Name.new("Akira"))
p a.get_name
p a.get_name.name = "Brad Pitt"
p a.get_name
結果は、Rubyに精通しているみなさんに言うまでもないかと思いますが、
Man#get_nameで.cloneをしていると、3つ目のa.get_nameで"Akira"の保護されたNameオブジェクトが返ります。
.cloneをしないと、私が"Brad Pitt"になってしまって、べ、べつに嬉しくなんかないんだからねっ!
ところで、cloneした事で、Name内のnameというプライベートフィールドが保護されてしまっているのですが、
これはcloneがディープコピーだという事ではないのでしょうか?あるいは私の認識が間違っているだけでしょうか。
http://www.asahi-net.or.jp/~dp8t-asm/java/tips/ObjectCopy.html
変数をコピーしただけのシャローコピーであれば、2行目のa.get_name.nameでcloneしていたとしても値が変わってしまうと思うのです。
http://www.ruby-lang.org/ja/man/html/Object.html
シャローコピーと書いてあるのですが、私の考えのどこに間違いがあるのでしょうか?
こういうのを防御的コピーと言うと思いますが、
Rubyでは、返すオブジェクトを不変に保ちたい時はどういうイディオムを使うのでしょうか?
1)上のようにコピーして返す。
2)更新メソッドを持たないラッパークラスを作ってコンストラクタ引数に元のオブジェクトを入れて返す
3)ドキュメントとして、「不変のつもりで大事に使ってください」と書く。
--
Akira Hayakawa <ruby@i-mail.jp>