正如问题可能表明的那样,我对Ruby仍然很陌生。我正在开发我的第一个自定义gem作为我自己的教程。在这种情况下,它是一些管理一副牌的类。我已经成功构建并安装了gem,但是当我尝试在IRB中使用它时,我得到一个'未初始化的常量'错误。我正在使用Ruby 2.0。这是基本的破败:
在我的gem中,我在lib
中有三个类:Card.rb
,Deck.rb
和card_deck.rb
(自动生成。card_deck.rb
定义模块CardDeck
,Card
和`Deck文件分别定义了同名的类。安装我的gem之后,我运行irb并得到以下内容:
$> require 'card_deck'
=> true
$> CardDeck
=> CardDeck
这告诉我gem已成功安装。但是,当我尝试使用Card
或Deck
时,我会收到以下信息:
$> Card
NameError: uninitialized constant Card
所以我的问题是:我希望从我的gem获得的任何类都需要包含在模块中,还是需要以不同的方式需要或导入?在我的gemspec中,lib文件夹列在required_path属性中。这是否意味着在需要我的gem需要在模块中定义之后我想要访问的任何类?
同样,我已经完成了一些Rails工作,但我仍然是整个Ruby的新手并且构建了宝石。感谢您的任何意见和建议。
答案 0 :(得分:1)
我发现在你不太了解正确行事方式的情况下做的最好的事情之一:为你的语言找到一个流行的宝石或图书馆,并注意它的结构方式。为4-5颗宝石做这件事,看看你注意到了什么,它会对你产生双重影响。其一,通过阅读代码,您将更好地掌握Ruby本身,并且您将获得两种语言模式和细微差别。
我会说,是的,我对Gems的天真知识。我已经尝试了这个类<<自我位,但它的代码味道很臭。
这些可能对宝石创作有所帮助: http://net.tutsplus.com/tutorials/ruby/gem-creation-with-bundler/
Ruby风格指南将帮助您适应分散的其他一些细微差别: https://github.com/bbatsov/ruby-style-guide