【问题标题】:Do I really need to require csv gem with Rails?我真的需要使用 Rails 的 csv gem 吗?
【发布时间】:2018-05-28 18:36:53
【问题描述】:

我的问题很简单:

我必须在使用 Ruby on Rails 的课程上 require 'csv' 吗?

如果我打开 rails console 并尝试使用 CSV gem,它可以工作,但我必须在文件中这样做吗?

【问题讨论】:

  • 如果你忽略了require 'csv',你的自动化测试就通过了,对吧?
  • 是的,但这确保它可以正常执行?
  • 就个人而言,我只想表明它正在该文件中使用。根据我的经验,我在服务或 lib 文件中使用 CSV,添加 require 并赋予它更圆润的外观感觉更好。如果文件可以独立运行或运行,则更是如此。 (我确实编写了没有 Rails 的 ruby​​ 脚本)
  • 它在标准库中,而不是 gem。您可以将 require 调用放入 application.rb 并在任何地方使用它

标签: ruby-on-rails ruby csv


【解决方案1】:

CSV library 是 ruby​​ 标准库的一部分;它不是 gem(即第三方库)。

与所有标准库(与 core 库不同)一样,ruby 解释器不会自动加载csv。所以是的,在您的应用程序中某处,您确实需要require 它:

irb(main):001:0> CSV
NameError: uninitialized constant CSV
        from (irb):1
        from /Users/tomlord/.rbenv/versions/2.4.4/bin/irb:11:in `<main>'
irb(main):002:0> require 'csv'
=> true
irb(main):003:0> CSV
=> CSV

在Rails应用等大型项目中,你可能会发现csv实际上已经被加载了;也许在某个“晦涩”的地方,比如在宝石中,或者在 config/initializers/*config/application.rb 的某个地方。

然而,依赖于像这样“不相关”的地方加载库通常是个坏主意;这样做可能会导致您在更改其他代码时无意中破坏它,或者逐渐在此处加载越来越多的库,即使不再需要一些库也是如此。

长话短说:是的,我建议在任何使用CSV 库的文件的顶部写上require 'csv'。或者,在一个较大的项目中,显然需要在很多地方加载和使用这个库,你可以考虑在像config/application.rb

这样的地方全局加载它

【讨论】:

  • 我同意,很好的答案。多个require 'csv's 是否有特定的缺点?据我了解,执行多重要求只会返回false。那么只有 Ruby 检查 CSV 库是否已加载对性能的影响?
  • @DaryllSantos 不是;多个requires 的性能成本可以忽略不计(如您所说,仅在第一次解析文件时才会发生)。拥有多个 require 语句的唯一真正“缺点”是代码混乱 - 再一次,这并不是什么大问题!
  • 在极少数情况下您确实需要强制重新评估文件,您应该使用load 而不是require
猜你喜欢
  • 2012-03-13
  • 2020-01-29
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多