gpt4 book ai didi

ruby-on-rails - 如何将 "import"嵌套类放入 Ruby 中的当前类?

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

在 Ruby 中,我可以将模块/类嵌套到其他模块/类中。我想要的是在文件或类中添加一些声明,以便能够通过短名称引用嵌套类,例如使用 Inner 获取 Outer::Inner,就像在 Java、C# 等中一样。语法可能是这样的:

module Outer
class Inner; end
class AnotherInner; end
end
class C
import Outer: [:Inner, :AnotherInner]
def f
Inner
end
end

简单的实现可能是这样的:

class Class
def import(constants)
@imported_constants =
(@imported_constants || {}).merge Hash[
constants.flat_map { |namespace, names|
[*names].map { |name| [name.to_sym, "#{namespace}::#{name}"] }
}]
end

def const_missing(name)
const_set name, eval(@imported_constants[name] || raise)
end
end

在 Rails 或某些 gem 中是否有可靠的实现,可以在兼容 Rails 的自动加载机制的同时进行类似的导入?

最佳答案

module Outer
class Inner; end
class AnotherInner; end
end

class C
include Outer

def f
Inner
end
end

C.new.f # => Outer::Inner

记住:Ruby 中没有嵌套类 这样的东西。一个类就像任何其他对象一样只是一个对象,并且它像任何其他对象一样被分配给变量。在这种特殊情况下,“变量”是一个在模块内命名空间的常量。然后将该常量添加到另一个模块(或类)的命名空间,就像添加任何其他常量一样:通过 includeing 模块。

关于ruby-on-rails - 如何将 "import"嵌套类放入 Ruby 中的当前类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11891259/

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