相关疑难解决方法(0)

如何根据名称动态调用方法?

当名称包含在字符串变量中时,如何动态调用方法?例如:

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 metaprogramming dynamic

94
推荐指数
5
解决办法
7万
查看次数

使用方法名inRuby中的字符串/变量调用方法

可能重复:
如何将字符串转换为方法调用?

目前我有一个代码正在做这样的事情

def execute
  case @command
    when "sing"
      sing()
    when "ping"
      user_defined_ping()
    when "--help|-h|help"
      get_usage()      
end
Run Code Online (Sandbox Code Playgroud)

我发现这个案例非常无用且非常庞大,我只想通过使用变量@command调用适当的方法.就像是:

def execute
 @command()
end
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我不需要和额外的execute()方法.

关于如何实现这款红宝石的任何建议?

谢谢!

编辑:为多个字符串添加了其他方法类型.不确定是否也可以优雅地处理.

ruby design-patterns

2
推荐指数
1
解决办法
3127
查看次数

标签 统计

ruby ×2

design-patterns ×1

dynamic ×1

metaprogramming ×1