[#837] request SCAN — Shin-ichiro HARA <sinara@...>

原です。

25 messages 1997/11/14
[#838] Re: request SCAN — matz@... (Yukihiro Matsumoto) 1997/11/14

まつもと ゆきひろです

[#839] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#840] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#841] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#843] Re: request SCAN — matz@... (Yukihiro Matsumoto) 1997/11/14

まつもと ゆきひろです

[#844] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#845] Re: request SCAN — matz@... (Yukihiro Matsumoto) 1997/11/14

まつもと ゆきひろです

[#864] [Req] Proc.new — Shin-ichiro HARA <sinara@...>

原です。

53 messages 1997/11/19
[#865] Re: [Req] Proc.new — matz@... (Yukihiro Matsumoto) 1997/11/19

まつもと ゆきひろです

[#866] Re: [Req] Proc.new — Shin-ichiro HARA <sinara@...> 1997/11/19

原です。

[#867] Re: [Req] Proc.new — matz@... (Yukihiro Matsumoto) 1997/11/19

まつもと ゆきひろです

[#875] Re: [Req] Proc.new — Shin-ichiro HARA <sinara@...> 1997/11/20

原です。

[#877] Re: [Req] Proc.new — shugo@... (Shugo Maeda) 1997/11/20

前田です。

[#879] Re: [Req] Proc.new — Shin-ichiro HARA <sinara@...> 1997/11/20

原です。

[#886] Re: [Req] Proc.new — shugo@... (Shugo Maeda) 1997/11/20

前田です。

[#890] Re: [Req] Proc.new — keiju@... (石塚圭樹 ) 1997/11/20

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

[ruby-dev:880] Re: [Req] Proc.new

From: keiju@... (石塚圭樹 )
Date: 1997-11-20 03:37:43 UTC
List: ruby-dev #880
けいじゅ@日本ラショナルソフトウェアです.

In [ruby-dev :00877 ] the message: "[ruby-dev:877] Re: [Req] Proc.new
", on Nov/20 11:15(JST) shugo@po.aianet.ne.jp (Shugo Maeda) writes:

>前田です。

>関数風メソッドをオブジェクト化する目的なら,
>
>def function(name)  
>  proc { |*args| send(name, *args) }
>end
>
>みたいなメソッドを定義するのではだめでしょうか。
>
>def foo(arg)
>  print arg, "\n"
>end
>
>func = function(:foo)
>func.call("hello")

そうですね. こういうてもありますね. 私も同じようなものを思いつきました.

こんな感じです:

class Function
  def initialize(method)
    method = method.id2name if method.kind_of? Fixnum
    @func = eval("proc{|*x| #{method}(*x)}", TOP_LEBELBINDING)
  end

  def call(*argv)
    @func.call *argv
  end

  def [](*argv)   # <- これはあまり括弧良くないっていわれているけど...
    @func.call *argv
  end
end

def Function(method)
  Function.new(method)
end

# でも, メソッドをきれいにオブジェクト化できない... というか, オブジェ
# クト化しても 呼び出し方が... オブジェクト指向言語であるからには, 関
# 数だけでなくメソッドもオブジェクト化できないと...


話しは戻りますが, どうしても関数をオブジェクト化して取り扱えないと行け
ないんでしょうか?

関数fooを引数としてどっかに渡したいのであれば, シンボル:fooを渡して, 
必要に応じてsendを使うんだよ. というのはだめなんでしょうか?

def foo
  ...
end

def hegehoge(func)
  send(func)
end

hogehoge(:foo)

これだと気分悪いんですかねえ... 
# それに, 関数がoverrideされていると動作が保証されないし...

__
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju@rational.com <<---

In This Thread