2016-07-31 14 views
0

Ich habe ein Juwel verwendet und versucht, eine Methode (Trans) in meinem Code zu erstellen.Undefinierte lokale Variable oder Methode `Übersetzer 'für main: Objekt (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") 

Wenn ich den Code ausführen, bekomme ich diesen Fehler:

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

Warum habe ich diesen Fehler, und wie kann ich dieses Problem lösen?

Antwort

0

Weil auf diese Weise suchen Sie eine lokale Variable translator und Sie haben nicht. Einige Lösungen:

make Übersetzer global

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

oder Pass Übersetzer trans Methode

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

translator Variable in diesem Code wird auf Klassenebene definiert, daher ist es eine lokale Variable in main Kontext (da der gesamte Code in main Kontext ausgeführt wird.)

Sie versuchen, es von t aufrufen er Instanz Kontext, wo es offensichtlich nicht definiert ist. Der einfachste Weg, dies zu überwinden, wäre @translator als Instanzvariable einer Klasse zu definieren:

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

def trans(text) 
    @translator.translate text, to: "ru" 
end 
Verwandte Themen