我是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!
答案 0 :(得分:1)
如果您想动态调用方法,请使用Object#send
。
http://ruby-doc.org/core-1.9.3/Object.html#method-i-send
出于安全原因,我会提醒您不要发送通过用户输入获得的方法。