main:Object 的未定义局部变量或方法“翻译器”(NameError)
Undefined local variable or method `translator' for main:Object (NameError)
我使用了 gem 并尝试在我的代码中创建一个方法 (trans)。
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)
为什么会出现这个错误,我该如何解决?
因为通过这种方式您正在寻找局部变量 translator
而您没有。一些解决方案:
使翻译器全球化
$translator = Yandex::Translator.new(api_key)
或将翻译器传递给 trans 方法
def trans(translator, text)
translator.translate text, to: "ru"
end
此代码中的 translator
变量定义在 class 级别,因此它是 main
上下文中的局部变量(因为整个代码在 main
上下文中执行.)
您正试图从 实例 上下文中调用它,显然未在其中定义它。克服它的最简单方法是将 @translator
定义为 class' 实例变量:
@translator = Yandex::Translator.new(api_key)
def trans(text)
@translator.translate text, to: "ru"
end
我使用了 gem 并尝试在我的代码中创建一个方法 (trans)。
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)
为什么会出现这个错误,我该如何解决?
因为通过这种方式您正在寻找局部变量 translator
而您没有。一些解决方案:
使翻译器全球化
$translator = Yandex::Translator.new(api_key)
或将翻译器传递给 trans 方法
def trans(translator, text)
translator.translate text, to: "ru"
end
translator
变量定义在 class 级别,因此它是 main
上下文中的局部变量(因为整个代码在 main
上下文中执行.)
您正试图从 实例 上下文中调用它,显然未在其中定义它。克服它的最简单方法是将 @translator
定义为 class' 实例变量:
@translator = Yandex::Translator.new(api_key)
def trans(text)
@translator.translate text, to: "ru"
end