在Ruby中执行多个需求的最佳方法是什么?

ala*_*anp 10 ruby rubygems

我不确定我是否已经看到了这个问题,但我想知道在ruby脚本中执行多个需求的最佳方法是什么.我已经提出了几个基本的例子,我将在下面概述,但我不确定是否有最好的做法 - 我的搜索结果没有回来.

0)一堆包括和例外(我将离开救援)

require 'rubygems'
require 'builder'
Run Code Online (Sandbox Code Playgroud)

1)字符串数组

torequire = ['rubygems', 'builder']
begin
  torequire.each do |req|
    require req
rescue LoadError => e
  # Not sure if this is great either
  puts "Missing required gem: " + e.message.split[-1]
  exit
end
Run Code Online (Sandbox Code Playgroud)

2)??

从字符串数组中加载它们是否会产生大问题?您可以类似地指定版本要求或位置,我只是想知道这样做是否存在问题.

Way*_*rad 17

简单的方式是最好的方式.

你可以做到这一点,但它清晰易懂 - 一个可怜的讨价还价:

[
  'rubygems',
  'rack',
  'rails'
].each(&method(:require))
Run Code Online (Sandbox Code Playgroud)

使用花哨的错误消息跳过"救援".当require需要抛出堆栈跟踪时,每个人都知道它意味着什么.

如果您想让使用您的程序的人更容易安装所需的gem,请查看bundler.

  • +1"交易澄清聪明 - 讨价还价",或者正如他们在Spinal Tab中所说的那样,"聪明与愚蠢之间存在着微妙的界限." (6认同)
  • 哇.虽然我永远不会对任何人造成这种情况,但这真的很聪明!对于任何想要细分的人(如果我错了请校正我),`method`返回一个`Method`对象,而&符号调用`to_proc`,然后'each`用作它的块.方法签名用作块参数,将调用者转换为被调用者.也就是说,虽然`['rubygems'].每个(&:require)`会调用''rubygems'.require()`,`['rubygems'].每个(&method(:require))`会调用`[ 'rubygems'].每个都做|依赖|/*require的实现*/end`.超级整洁.谢谢! (2认同)

the*_*gah 12

我见过的所有ruby脚本都只列出了一行,就像你拥有的一样.

require 'rubygems'
require 'rack'
require 'rails'
Run Code Online (Sandbox Code Playgroud)


JUS*_*ION 5

在第一个中,很清楚你在做什么.

在第二个,它需要有人解码你正在做的事情.

强迫每个人解码你正在做的事情似乎有点异想天开,所以你可以保存几行键入(只有当你在一个源文件中使用了大量的库时才会有一些代码味道本身).请记住,代码读取的次数是写入的一个数量级的三倍或三倍.如果它是易于书写或易于阅读之间的选择,阅读应该胜出.