从模块返回类似proc的方法非常容易:
Traceback (most recent call last):
File "/Users/File.py", line 616, in <module>
main_dic=merge_many_dics(dic1,dic2,dic3,dic4)
File "/Users/File.py", line 132, in merge_many_dics
& dic7.viewkeys() & dic8.viewkeys() & dic9.viewkeys() & dic10.viewkeys():
AttributeError: 'bool' object has no attribute 'viewkeys'
但是如果我想从同一个模块返回多个(但不是全部)方法怎么办?
一种方法是:module Foo
def self.bar
# Method implementation
end
def self.baz
# Method implementation
end
def self.qux
# Method implemenatation
end
def self.zoo
# Method implementation
end
end
Foo.method(:bar) # Returns a proc object
是否有更好,更敏捷的方法来做同样的事情?
答案 0 :(得分:2)
试试这个:
Foo.methods(false).map {|e| Foo.method(e)}
Foo.methods(false)
将返回不继承为数组的所有类方法,而map
将遍历每个元素。
修改强>
考虑下面的评论后:
proc_arr = [:bar, :baz].map {|e| Foo.method(e)}
答案 1 :(得分:2)
你总是可以使用猴子修补来使它看起来像你想要的那样:
class Object
def get_methods(*methods)
methods.map { |m| method(m) }
end
end
module Foo
def self.bar
# Method implementation
end
def self.baz
# Method implementation
end
end
Foo.get_methods(:foo, :baz)
答案 2 :(得分:1)
我不知道是否有更好的方法,但也许这比你的解决方案更清洁:
proc_methods = []
# => []
(Foo.methods - Object.methods).each { |m| proc_methods << Foo.method(m) }
# => [:bar, :baz]
proc_methods
# => [#<Method: Foo.bar>, #<Method: Foo.baz>]
Foo
从Object
类继承其方法,这是所有Ruby对象的默认根。 (http://ruby-doc.org/core-2.2.3/Object.html)
使用Foo.methods - Object.methods
,您只保留自定义方法。