宝石没有输出预期的文字

时间:2012-05-19 06:08:46

标签: ruby rubygems irb

我已完成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

提前感谢您的反馈!

1 个答案:

答案 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,则会通知您(这是我期望的错误)。