在Python程序中给定带有函数名称的字符串调用函数的最佳方法是什么.例如,假设我有一个模块foo,我有一个内容为的字符串"bar".什么是最好的打电话foo.bar()?
我需要获取函数的返回值,这就是我不仅仅使用它的原因eval.我想通过使用eval定义一个返回该函数调用结果的临时函数来做到这一点,但我希望有更优雅的方法来做到这一点.
当名称包含在字符串变量中时,如何动态调用方法?例如:
class MyClass
def foo; end
def bar; end
end
obj = MyClass.new
str = get_data_from_user # e.g. `gets`, `params`, DB access, etc.
str #=> "foo"
# somehow call `foo` on `obj` using the value in `str`.
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?这样做是否存在安全风险?
在Ruby中,一切都应该是一个对象.但是我有一个很大的问题,就是通常的方式来定义函数对象
def f
"foo"
end
Run Code Online (Sandbox Code Playgroud)
与Python不同,f是函数结果,而不是函数本身.因此,f(),f,ObjectSpace.f都是"foo".还f.methods返回字符串方法列表.
如何访问函数对象本身?
可能重复:
使用Ruby中的函数名称从字符串调用函数
我想做这样的事情:
def self.greater_than(col_str='events')
self."#{col_str}"_greater_than(30) # search logic scope method
end
Run Code Online (Sandbox Code Playgroud)
我怎样才能正确调用它?我猜测语法可能与创建动态方法类似.