0

我怎样才能在一个命名空间下访问每个 Faker 方法:

any.sentence
any.name
... other methods from Faker::xxx classes

而不是写:

Faker::Lorem.sentence
Faker::Name.name
...

我正在使用 RSpec 和 Rails。

4

1 回答 1

1

为了做到这一点,你可以定义你的变量any,它等于你想调用的命名空间类:

lorem = Faker::Lorem
lorem.sentence
#=> "Dignissimos eos qui doloribus quaerat sequi est corrupti error."

name = Faker::Name
name.name
#=> "Dr. Percival Ernser"

但是,请将此视为一种技巧,而不是您应该在代码中执行的操作。事实上,当有人读你的代码(或几个月后读你的代码)时,看到Faker::Namespace就会很明显。另一方面,阅读name.name会导致混乱,因为您必须寻找它的定义才能理解它的作用。命名空间有存在的理由,不应被覆盖以节省一些击键。希望这能回答你的问题!

编辑:您评论“将所有命名空间统一为一个”。这是不可能的(至少对于Faker)。实际上,不同的方法具有相同的名称,但在不同的命名空间中。例如,在和Faker中都有方法的实现(产生不同的结果)。nameFaker::NameFaker::Company

因此,统一命名空间是不可能的,因为它会导致丢失一些方法。

于 2013-08-03T11:21:11.817 回答