【问题标题】:Ruby Gem with Acroynym in the name名称中带有 Acroynym 的 Ruby Gem
【发布时间】:2012-09-12 15:05:47
【问题描述】:

[已解决:请参阅下面的评论]

我创建了一个 Ruby Gem 来连接到我的应用程序的 API:my_app_api。我想像这样使用它:MyAppAPI::Foo.bar()。但是,我得到:

NameError: uninitialized constant MyAppAPI

我知道调用/命名它的标准方法是MyAppApi::Foo.bar(),但我更愿意保留首字母缩写词类命名约定。如何指定/加载模块?

作为参考,该类如下所示:

module MyAppAPI

 class Foo < ActiveResource::Base
 extend MyAppAPI

 self.site = 'http://localhost:3000/api/'
 self.format = :json

 class << self

   def bar
     return 'huzzah!'
   end

 end

  end
end

my_app_api.rb 文件如下所示:

require "rubygems"
require 'active_resource'

require 'my_app_api/foo'

【问题讨论】:

  • 看起来这实际上是 RVM 问题的结果(我在全局 gemset 中安装了旧版本的 gem,但没有安装)。感谢您的想法!

标签: ruby rubygems


【解决方案1】:

您是否尝试过以正常方式加载 gem?

require 'my_app_api'
MyAppAPI::Foo.bar()

常量名称 MyAppAPI 很好,不是问题的原因。有大量的 Ruby 核心类/模块的名称中有首字母缩略词:

【讨论】:

  • 我已经用代码示例更新了这个问题。这个问题肯定与常量名称有关,因为 MyAppApi::Foo.bar() 工作正常,如果我在类声明中调整命名。我确信这是非常简单的事情——我没有声明某些东西的地方。我知道这很简单,在其他地方也能正常工作——我只是不确定我需要做些什么不同的事情。
【解决方案2】:

尝试在您的require 语句之后在 my_app_api.rb 中声明空模块:

module MyAppAPI
end

如果您依赖动态类和模块加载机制(如 Rails 使用),这可能会有所帮助。

我假设您的应用明确调用 require "my_app_api"。这是一个什么样的应用,你在哪里做require

【讨论】:

    猜你喜欢
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    相关资源
    最近更新 更多