首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用另一个gem作为依赖项并创建继承自它的类?

如何使用另一个gem作为依赖项并创建继承自它的类?
EN

Stack Overflow用户
提问于 2021-04-07 09:54:05
回答 1查看 219关注 0票数 0

我正在尝试创建一个gem,它封装了一些外部的API调用,我想使用一个名为“api蓝图”的gem。

我已经添加了我的gemspec文件spec.add_runtime_dependency 'api-blueprint'的依赖项。

现在我想让我的一些类继承它

代码语言:javascript
复制
module MyGem
  class Request < ApiBlueprint::Model
    ... code ...
  end
end

我得到了一个错误

代码语言:javascript
复制
NameError:
  uninitialized constant MyGem::ApiBlueprint

我也不确定如何继承依赖项,而不将我的gem名称附加到命名空间中。我也尝试过不将它封装在模块中,但是我得到了相同的问题,尽管没有MyGem命名空间。

我在rails应用程序中使用了这个gem,同样的用法也没有问题,但现在我需要将rails应用程序中的逻辑重构为gem。

我还试图同时要求api_blueprintapi-blueprint,后者返回此错误

代码语言:javascript
复制
Failure/Error: require "api-blueprint"

ArgumentError:
  wrong number of arguments (given 2, expected 0)

而前者只是返回一个LoadError。我不确定这里的问题似乎是什么,我是否需要包括在其他地方,除了宝石规范文件?注意,我也使用spec.add_dependency,但是我也遇到了同样的问题。我有点迷路了,这是我第一次去红宝石

(谢谢你的关注:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-07 10:32:46

和我不确定如何从依赖项继承,而不将我的gem名称附加到命名空间中。

你不需要那样做。你只是被一条误导的错误信息弄糊涂了。

在ruby中,常量查找首先在模块内进行,然后在全局命名空间中进行。

换句话说,这个代码:

代码语言:javascript
复制
module MyGem
  class Request < ApiBlueprint::Model

首先尝试查找常量:MyGem::ApiBlueprint::Model,然后尝试查找常量:ApiBlueprint::Model (如果失败)。如果这也失败了,它将使用第一个错误消息,这就是您所看到的。

为了防止令人困惑的错误消息(尽管这本身并不能解决实际的问题!!),您可以显式地告诉解释器只查找全局命名空间中的常量:

代码语言:javascript
复制
module MyGem
  class Request < ::ApiBlueprint::Model

失败/错误:需要“api-蓝图”ArgumentError:参数数错误(给定2,预期为0)

您需要为我们提供更多关于该错误的上下文。堆栈跟踪是什么?用2个参数而不是0调用什么方法?

据我所知,添加这个require语句应该是您需要做的全部工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66983664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档