gpt4 book ai didi

ruby - 查找作用域为特定命名空间(模块)的常量(类)

转载 作者:数据小太阳 更新时间:2023-10-29 08:49:03 28 4
gpt4 key购买 nike

我正在尝试以编程方式获取常量(例如类),但只想查看在特定命名空间中定义的常量。但是,const_get 会在搜索常量时冒泡到更高的命名空间。例如:

module Foo
class Bar
end
end

class Quux
end

如果您随后要求 Foo 返回常量 "Bar",它将返回正确的类。

Foo.const_get('Bar')
#=> Foo::Bar

但是,如果您向它询问 "Quux",它会向上搜索路径并找到顶级 Quux:

Foo.const_get('Quux')
#=> Quux

有没有办法让它在调用const_get 的模块中搜索?

最佳答案

Module#const_get说:

Checks for a constant with the given name in mod If inherit is set, the lookup will also search the ancestors (and Object if mod is a Module.)

The value of the constant is returned if a definition is found, otherwise a NameError is raised.

然后你可以按照下面的方式做:

module Foo
class Bar
end
end

class Quux
end

Foo.const_get('Quux',false) rescue NameError
# >> NameError
Foo.const_get('Bar',false) rescue NameError
# >> Foo::Bar

关于ruby - 查找作用域为特定命名空间(模块)的常量(类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18334258/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com