【问题标题】:Ruby - Can I use classes from a gem that aren't defined in a module?Ruby - 我可以使用模块中未定义的 gem 中的类吗?
【发布时间】:2014-01-14 12:23:36
【问题描述】:

正如问题可能表明的那样,我对 Ruby 还是很陌生。我正在开发我的第一个自定义 gem 作为我自己的教程。在这种情况下,它是一些用于管理一副纸牌的类。我已经成功构建并安装了 gem,但是当我尝试在 IRB 中使用它时,我得到了一个“未初始化的常量”错误。我正在使用 Ruby 2.0。这是基本的破败:

在我的 gem 中,lib 中有三个类:Card.rbDeck.rbcard_deck.rb(这是自动生成的。card_deck.rb 定义了模块 CardDeckCard 和`Deck 文件分别定义了同名的类。安装我的 gem 后,我运行 irb 并得到以下内容:

$> require 'card_deck'
=> true
$> CardDeck
=> CardDeck

这告诉我 gem 安装成功。但是,当我尝试使用 CardDeck 时,我得到以下信息:

$> Card
NameError: uninitialized constant Card

所以我的问题是:我希望从我的 gem 中获得的任何类是否需要包含在一个模块中,或者是否需要以不同的方式要求或导入它们?在我的 gemspec 中,lib 文件夹列在 required_pa​​th 属性中。这是否意味着在需要我的 gem 之后我想要访问的任何类都需要在模块中定义?

再一次,我做了一些 Rails 工作,但对 Ruby 和构建 gems 还是很陌生。感谢您的任何意见和建议。

【问题讨论】:

    标签: ruby gem


    【解决方案1】:

    我发现在你不知道正确的方法做某事的情况下最好的方法之一是:为你的语言找到一个流行的 gem 或库,并注意它的结构方式。对 4-5 颗宝石执行此操作,看看你注意到了什么,它会对你产生双重影响。第一,您将通过阅读代码更好地掌握 Ruby 本身,第二,您将了解该语言的模式和细微差别。

    我会说是的,以我公认的关于宝石的幼稚知识。我已经尝试过

    这些可能对创建 gem 有所帮助: http://net.tutsplus.com/tutorials/ruby/gem-creation-with-bundler/

    Ruby 风格指南将帮助您适应散布在各处的其他一些细微差别: https://github.com/bbatsov/ruby-style-guide

    【讨论】:

    • 谢谢,这是有道理的。由于我的两个课程都相当小,我只是将它们包含在同一个模块中。不理想,但由于这样做的目的是学习如何使用和创建宝石,我很满意。谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 2014-10-20
    • 2011-06-09
    • 1970-01-01
    • 2020-05-13
    • 2012-11-28
    • 1970-01-01
    • 2011-05-04
    • 2011-11-25
    相关资源
    最近更新 更多