如何区分在不同Gems中定义的具有相同名称的类?

时间:2018-12-05 05:30:12

标签: ruby

我有两个宝石pdf阅读器和折纸。每个宝石都有一个名为PDF的模块。当我按以下顺序打电话给他们时,

# Importing first gem
requires 'pdf/reader'

# Second gem
requires origami
include Origami

PDF::Reader.new(dir) # (first gem)
PDF.read dir # (second gem) #>> undefined method 'read' for PDF:Module (NoMethodError)

第一个gem没有问题,但是当我到达第二个gem时,我犯了一个错误,声称pdf没有read方法。但是,如果我先导入“折纸”,然后导入“ pdf /阅读器”,则会出现错误:

PDF is not a module (TypeError)

Ruby对我正在调用的宝石感到困惑。

我该如何指定我在谈论特定的第一颗或第二颗宝石?

1 个答案:

答案 0 :(得分:1)

在您的特定示例中,include Origami是不必要的,我不知道他们为什么将这个示例添加到其README中。

require 'pdf/reader'
require 'origami'

PDF::Reader.new(dir) # (first gem)
Origami::PDF.read dir # (second gem)

有时可能会执行以下操作:

require 'pdf/reader'

PDFReader = PDF::Reader

require 'origami'
include Origami

PDFReader.new(dir)
PDF.read(dir)