我在几个模块中有一个类:This::Is::A::Long::ClassName. 有没有一种方法可以在一个脚本或方法中ClassName无需引用名称空间就可以使用?而不是写:
This::Is::A::Long::ClassName.do_something
This::Is::A::Long::ClassName.do_something_else
This::Is::A::Long::ClassName.do_something_different
Run Code Online (Sandbox Code Playgroud)
下面的事情有可能吗?
include This::Is::A::Long
ClassName.do_something
ClassName.do_something_else
ClassName.do_something_different
Run Code Online (Sandbox Code Playgroud)
Ruby 没有 等价物C++ using namespace,如果不在正确的命名空间中,则无法引用类,但您始终可以将其设为变量,因为类也是对象
long_class = This::Is::A::Long::ClassName
long_class.do_something
long_class.do_something_else
# and so on
Run Code Online (Sandbox Code Playgroud)
编辑
Aninclude不会将您置于正确的命名空间中,它包含您所包含的模块中的方法和类(也就是说,它将模块放入祖先类中),因此肯定不适合您的需求:请考虑以下事项:
module This
module Is
module A
def foo
puts 'A#foo'
end
def bar
puts 'A#bar'
end
class ClassName
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在,您可能不想This::Is::A::ClassName在另一个类中编写,比方说:
class C
def foo
puts 'C#foo'
end
end
class B < C
include This::Is::A
end
Run Code Online (Sandbox Code Playgroud)
现在,B.new.foo还是拿出C#foo来吧?错误的。由于您包含了该模块,该方法已被覆盖。