2012-05-19 1 views
0

첫 번째 보석 섹션을 this tutorial으로 완성했습니다.보석이 예상 한 텍스트를 출력하지 않습니다.

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 

을 내가 같은 내 hola.rb을 수정하려고 할 때 그러나, 에 더 많은 보석을 섹션을 요구하는 IRB, 나는 동일한 출력을 얻어야한다 :

% irb -Ilib -rhola 
irb(main):001:0> Hola.hi(:english) 
=> "hello world" 
irb(main):002:0> Hola.hi(:spanish) 
=> "hola mundo" 

그러나 나는 적절한 결과를 얻지 못하고있다. 내 gemspec을 수정하고 보석을 다시 설치하려고했지만 성공하지 못했습니다. 이 사건에서 내가 뭘 잘못했다고 생각하니?

[email protected]:~/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

내가 당신 (복사/붙여 넣기)과 같은 코드를 시도했는데 예상대로 작동하지 않아 이상합니다. 'irb '을 열고 수동으로 lib를 요구함으로써 간단히 시도하십시오. –

+0

@ SamyDindane : 감사합니다. 시도 해보고 그것이 어떻게 진행되는지 알려줄 것입니다. – stanigator

답변

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 

당신은 두 개의 언어를 지원 :

나는 코드를 조금 수정하는 것입니다. 오류가 있거나 다른 (영어) 텍스트가있는 경우 다른 언어가 감지되고 선택할 수 있습니다.

당신은 그것을 시작할 수 있습니다 다음 expection의

class Hola 
    def self.hi(language = :english) 
     translator = Translator.new(language, true) ## <-- Modified 
     translator.hi 
    end 
    end 

    require 'hola/translator'  

장점을 : 당신은 정말 예외를 호출하는 파일을 볼 수 있습니다.

다른 어떤 발언 :

  • 나는 모듈이 아닌 클래스로 Hola를 정의하는 것이 좋습니다.
  • raise 대신 로거를 정의하고 오류를보고 할 수 있습니다.

예 : :spanish의 유형 (즉, 내가 기대하는 오류이다)이있는 경우

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) 

로거를 활성화 한 후에는, 통보된다.

+0

나는 당신의 제안을 시도하고 어떻게 진행되는지보고 할 것이다. – stanigator

+0

Ruby 명령을 사용하여 마지막 예제를 실행하려고 시도했을 때이 오류가 발생합니다. https://gist.github.com/5595e74231002e14c93f 생각이 있습니까? – stanigator

+0

방금 ​​코드를 시도했지만 제대로 작동했습니다. 나는':'과''spanish ''사이에 공백을 추가 할 때 오류 메시지를 (다소) 재현 할 수 있습니다. 잘라 내기 + 붙여 넣기로 코드를 가져 왔습니까? 아니면 몇 가지 변경 사항이 있습니까? 복사 오류가 있는지 확인하기 위해 testfile을 업로드 할 수 있습니까? – knut