Getting ruby function object itself
在Ruby中,一切都应该是一个对象。但是我有一个很大的问题,就是要用通常的方法来定义函数对象,比如
1 2 3 | def f "foo" end |
与Python不同,F是函数的结果,而不是函数本身。因此,
如何访问函数对象本身?
您只需使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | >> def f >> "foo" >> end => nil >> f =>"foo" >> method(:f) => #<Method: Object#f> >> method(:f).methods => [:==, :eql?, :hash, :clone, :call, :[], ...] >> class SomeClass >> def f >> "bar" >> end >> end => nil >> obj = SomeClass.new => #<SomeClass:0x00000001ef3b30> >> obj.method(:f) => #<Method: SomeClass#f> >> obj.method(:f).methods => [:==, :eql?, :hash, :clone, :call, :[], ...] |
希望这有帮助。
方法
1 2 | f = obj.method :f puts f.call # or f[] |
这个
1 2 | unbound_plus = Fixnum.instance_method('+') plus_2 = unbound_plus.bind(2) |
(还有一种解绑方法)
我自己也找到了答案
1 | obj = method :f |
感谢大家的启发:)
这不是一个函数,而是一个对象的方法。如果要获取表示方法的对象,请向其所属对象询问:
1 | someobj.method :f |
例如:
1 2 | plus_one = 1.method :+ plus_one[9] # 10 |
在Ruby中,你所要求的没有意义。(在Python、JavaScript、Java和C语言等语言中,它是有意义的)。
在Ruby中,您可以告诉类它应该响应什么消息,以及应该以什么方式响应这些消息。告诉类的最常见方法是在类中定义方法。但同样,这仅仅意味着:当有人向这个实例发送消息
你可以做一些事情,比如得到一个符号(
如果需要函数对象,则应创建一个
1 | f = Proc.new { |x| x * 2 } |
您可以使用
1 | f.call(8) # => 16 |
或
1 | f[8] # => 16 |
甚至可以在
1 | [1, 2, 3, 4, 5].map(&f) # => [2, 4, 6, 8, 10] |
您可以获得一个在运行时对应于该函数的对象,但据我所知,在函数/类定义中没有与Python允许您做的相同的事情。
希望有人能证明我是错的,但我从来没有成功过。