2016-07-31 10 views
0

私は宝石を使って、コード内にメソッド(trans)を作成しようとしました。未定義のローカル変数またはメソッド `translator 'for main:Object(NameError)

require 'yandex-translator' 

translator = Yandex::Translator.new(api_key) 

def trans(text) 
    a = translator.translate text, to: "ru" 
    return a 
end 

puts trans("stack") 

私は、コードを実行すると、私はこのエラーを取得:

'trans': undefined local variable or method `translator' for main:Object (NameError) 

は、なぜ私はこのエラーを取得しました、そしてどのように私はこの問題を解決することができますか?

答えて

0

このように、ローカル変数translatorを探していて、そうしていないためです。いくつかの解決策:

メイク翻訳グローバル

$translator = Yandex::Translator.new(api_key) 

か、このコード内の変数はクラスレベルで定義されているトランス方式に

def trans(translator, text) 
    translator.translate text, to: "ru" 
end 
1

translatorをトランスレータを渡すが、それ故にそれは(mainコンテキスト内のローカル変数ですコード全体がmainコンテキストで実行されるためです)。

あなたはtから呼び出しようとしています彼はインスタンスの文脈では明らかに定義されていない。それを克服する最も簡単な方法は、@translatorをクラスのインスタンス変数として定義することです。

@translator = Yandex::Translator.new(api_key) 

def trans(text) 
    @translator.translate text, to: "ru" 
end 
関連する問題