[#41455] オブジェクト同士の演算などを実装するには? — Hideo Konami <konami@...>

小波です.

24 messages 2005/11/02
[#41457] Re: オブジェクト同士の演算などを実装するには? — rubikitch <rubikitch@...> 2005/11/02

From: Hideo Konami <konami@kyoto-wu.ac.jp>

[#41459] Re: オブジェクト同士の演算などを実装するには? — Hideo Konami <konami@...> 2005/11/03

小波です.

[#41461] Re: オブジェクト同士の演算などを実装するには? — IWAOKA Masahiro <iwaoka@...> 2005/11/03

いわおかです。

[#41489] Matrixの継承について — argento@...

はじめまして。吉田と申します。

25 messages 2005/11/06
[#41495] Re: Matrixの継承について — Yukihiro Matsumoto <matz@...> 2005/11/06

まつもと ゆきひろです

[#41497] Re: Matrixの継承について — "T.Y" <argento@...> 2005/11/07

るびきち様、まつもと様

[#41499] Re: Matrixの継承について — keiju@... (石塚圭樹) 2005/11/07

けいじゅ@いしつかです.

[#41529] Re: Matrix の継承について — Shin-ichiro HARA <sinara@...> 2005/11/12

原です。

[#41535] Re: Matrix の継承について — keiju@... (石塚圭樹) 2005/11/14

けいじゅ@いしつかです.

[#41536] Re: Matrix の継承について — Yukihiro Matsumoto <matz@...> 2005/11/14

まつもと ゆきひろです

[#41537] Re: Matrix の継承について — keiju@... (石塚圭樹) 2005/11/14

けいじゅ@いしつかです.

[#41538] Re: Matrix の継承について — Yukihiro Matsumoto <matz@...> 2005/11/14

まつもと ゆきひろです

[#41503] 数を減らしてくループ — Takeshi Horinouchi <horinout@...>

堀之内と申します。

13 messages 2005/11/08

[#41602] エクセルファイルを読み込む際の問題(質問) — "Hisashi Yahata" <yahatah@...>

質問で恐縮ですが、ご教示ください。

14 messages 2005/11/28

[#41624] MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

26 messages 2005/11/30
[#41625] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/01

永井@知能.九工大です.

[#41627] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/01

天野竜太郎と申します。

[#41636] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/02

永井@知能.九工大です.

[#41637] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/02

8.4.10のtcl.hやtk.hは、

[#41644] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/03

永井@知能.九工大です.

[#41646] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/03

> Tcl/TkAqua もこの Macintosh のルールに従うのであれば

[#41647] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/03

永井@知能.九工大です.

[#41649] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/03

永井@知能.九工大です.

[#41650] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/04

天野です。

[#41651] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/04

永井@知能.九工大です.

[#41653] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/04

[#41658] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/04

永井@知能.九工大です.

[#41663] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/04

完全に私の勘違いです。

[#41664] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — Hidetoshi NAGAI <nagai@...> 2005/12/05

永井@知能.九工大です.

[#41665] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb — 天野 竜太郎 <wn9r-amn@...> 2005/12/05

ruby-list:41651の

[ruby-list:41600] Re: 名前空間の衝突を回避する方法

From: rubikitch <rubikitch@...>
Date: 2005-11-26 19:27:38 UTC
List: ruby-list #41600
From: Kentaro KAWAMOTO <kentaro.kawamoto@gmail.com>
Subject: [ruby-list:41598] Re: 名前空間の衝突を回避する方法
Date: Sun, 27 Nov 2005 03:02:07 +0900

るびきちです。

> 逆に、requireされるクラス・モジュールを別のモジュールの中に
> 入れてしまうことはできないのでしょうか?

それなら岩月さんの言うように class_eval (module_eval) が手っ取り早いです。
class_evalはRubyの特権ともいえるものなので、うまく使うとかなり強力です。

> 下のコードを試したところダメだった(= requireされるFooモジュールが
> グローバルな名前空間(?)で定義されてしまったみたい)のですが・・・。
> 
> ---
> module M
>   require 'Foo/bar'
> end
> 
> class Foo
>   include M::Foo
> end
> ---
そういうものです。

> > 定数 Foo に "Foo" という名前のModule オブジェクトが代入さ
> > れます。また、別な定数にModuleオブジェクトを代入することでaliasされます。
> などの方法でできそうですが、
> これはなんとなく非標準・非推奨なテクニックなように思えます。

どうなんでしょう。
Rubyはすべてがオブジェクト、当然モジュールもオブジェクト。
オブジェクトは代入できる。
だから代入したら別名として扱える。
という感じで納得いきませんか?

> もうちょっとスマートな、というか標準的な方法は無いでしょうか?

ごめんなさい、これ以上思い付きません。
自分が思い付く限りでは class_eval が一番スマートな気がします。

# Kernel#loadの第二引数をtrueにすると無名モジュール内で実行されますね。


ここで発想の転換ですが、「汚い小細工」の部分をライブラリに追い出してしまえば、
メインのコードはきれいになると思います。
便利な添付ライブラリだって、中身はかなり小細工がしてあるものです。
僕のお気に入りのforwardable.rbも中身はmodule_evalやらinstance_evalやら…。

### rename-module.rb
def rename_module(from,to,mod=Object)
  mod.module_eval do 
    const_set to, const_get(from)
    remove_const from
  end
end
### ここまで

require 'rename-module'

module Foo
  def foo
    1
  end
end

rename_module :Foo, :Bar

class Foo
  include Bar
end

p Foo.new.foo # => 1


class_evalの例も

%%% load-in-module.rb
class Module
  def load_in_module(script)
    module_eval(File.read(script))
  end
end  
%%%


%%% foo.rb
class Foo
end
%%%

%%% main.rb
require 'load-in-module'
module Bar
  load_in_module "foo.rb"
end


p Bar::Foo.new

%%%


るびきち☆
http://www.rubyist.net/~rubikitch/

In This Thread