如何动态设置方法作为其他类方法

时间:2013-05-22 17:00:24

标签: ruby command-line-interface thor

我是Ruby的新手,我正在创建一个带有Thor和一些额外宝石的cli应用程序。我的问题是我从用户输入(从控制台)并将数据作为变量传递给现有方法(此方法来自宝石)

我的方法

def search(searchtype, searchterm)

  search = OtherClass.new  
  result = search.search.searchtype keyword: "#{searchterm}"
  puts result
  # search.search.searchtype is not a method in the gem im using.

end

OtherClass gem有以下搜索方法:users,repos

用户方法

def users(*args)

  arguments(args, :required => [:keyword])
  get_request("/legacy/user/search/#{escape_uri(keyword)}", arguments.params)

end

回购方法

def repos(*args)
  arguments(args, :required => [:keyword])

  get_request("/legacy/repos/search/#{escape_uri(keyword)}", arguments.params)
end

那么如何将用户数据传递给OtherClass中的方法呢?这是我想做的事情。 SEARCHTERM将作为方法参数动态传递给search.search对象。

def search(SEARCHTYPE, searchterm)

 search = OtherClass.new  
 result = search.search.SEARCHTYPE keyword: "#{searchterm}"
 puts result

end

"#{searchterm}"按预期工作,但我也想动态地将方法传递给search.search对象,这可能是用if来做的,但我确定这是一个更好的方法,也许是解决这个问题的Ruby方法。 / p>

最后我希望能够像这样使用这个小程序(serch方法)

./ search.rb搜索opensource linux

(opensource可以是用户,或其他类型的搜索,linux可以是searchtype的搜索关键字)

如果可以,我会提供任何帮助!

日Thnx!

1 个答案:

答案 0 :(得分:1)

如果您想动态调用方法,请使用Object#send

http://ruby-doc.org/core-1.9.3/Object.html#method-i-send

出于安全原因,我会提醒您不要发送通过用户输入获得的方法。