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