我已完成this tutorial的 First Gem 部分。但是,当我尝试修改我的hola.rb时,在需要更多宝石部分中:
class Hola
def self.hi(language = :english)
translator = Translator.new(language)
translator.hi
end
end
require 'hola/translator'
并添加了此translator.rb文件:
class Hola::Translator
def initialize(language)
@language = language
end
def hi
case @language
when :spanish
"hola mundo"
else
"hello world"
end
end
end
如果我在IRB中输入这些命令,我应该得到相同的输出:
% irb -Ilib -rhola
irb(main):001:0> Hola.hi(:english)
=> "hello world"
irb(main):002:0> Hola.hi(:spanish)
=> "hola mundo"
但是,我没有得到正确的结果。我尝试修改我的gemspec并重新安装gem,但没有成功。在这种情况下你认为我做错了什么?
stanley@ubuntu:~/Github/webdev_class/ruby/hola_stanley/lib$ irb -Ilib -rhola
irb(main):001:0> Hola.hi(:english)
=> "hello world"
irb(main):002:0> Hola.hi(:spanish)
=> "hello world"
irb(main):003:0> quit
提前感谢您的反馈!
答案 0 :(得分:0)
我没有看到,出了什么问题,但你确定没有类型而且你要求提供你想要的文件吗?
我会稍微修改一下代码:
class Hola::Translator
def initialize(language, exceptions = false)
@language = language
@exceptions = exceptions
end
def hi
case @language
when :spanish
"hola mundo"
when :english
"hello world"
else
raise ArgumentError, "Unsupported language #{@language.inspect}" if @exceptions
"hello world"
end
end
end
您支持两种语言:西班牙语和英语。检测到其他语言,如果收到错误或替代(英语)文本,您可以选择。
您可以通过以下方式启动它:
class Hola
def self.hi(language = :english)
translator = Translator.new(language, true) ## <-- Modified
translator.hi
end
end
require 'hola/translator'
预期的一个优点:您可以看到,哪个文件确实称为异常。
其他一些评论:
Hola
定义为模块,而不是类。raise
您可以定义记录器并报告错误。示例:
require 'log4r'
module Hola
LOG = Log4r::Logger.new('Hola')
class Translator
def initialize(language)
@language = language
end
def hi
case @language
when :spanish
"hola mundo"
when :english
"hello world"
else
LOG.error("Unsupported language #{@language.inspect}")
"hello world"
end
end
end
def self.hi(language = :english)
translator = Translator.new(language)
translator.hi
end
end #module Hola
p Hola.hi
p Hola.hi(:english)
p Hola.hi(:spanish)
p Hola.hi(:german)
puts "Activate Hola-warnings"
Hola::LOG.outputters << Log4r::StdoutOutputter.new('stdout')
p Hola.hi
p Hola.hi(:english)
p Hola.hi(:spanish)
p Hola.hi(:german)
激活记录器后,如果您的类型为:spanish
,则会通知您(这是我期望的错误)。