0

我已经完成了本教程的第一个宝石部分。但是,当我尝试修改我的 hola.rb 时,在需要更多宝石部分:

class Hola
  def self.hi(language = :english)
    translator = Translator.new(language)
    translator.hi
  end
end

require 'hola/translator'

并添加了这个 translate.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
4

1 回答 1

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(这是我所期望的错误)。

于 2012-05-19T13:58:52.763 回答