1

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

我的方法

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 方法来解决这个问题问题。

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

./search.rb 搜索开源linux

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

如果这是可能的,我会apprechiate任何帮助!

谢谢!

4

1 回答 1

1

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

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

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

于 2013-05-22T17:32:16.207 回答