如何解决您可以通过一个 require 语句来要求一整套模块或类吗?
我正在尝试使用一个 require
语句导入许多类。这可能吗?
require "./module-a"
require "./module-b"
require "./module-c"
ModuleA.who_am_i()
ModuleB.who_am_i()
instanceB = ClassB.new
instanceB.who_am_i()
ModuleC.who_am_i()
instanceC = ClassC.new
instanceC.who_am_i()
当我运行这个程序时,我得到以下信息:
Showing last frame. Use --error-trace for full trace.
In main.cr:9:13
9 | instanceB = ClassB.new
^
Error: undefined constant ClassB
Did you mean 'Class'?
exit status 1
ClassB
在文件 module-b/module-b.cr
中定义。解决方法是将 require 语句更改为 ./module-b/*
。对于 module-c
,我在它自己的文件中定义了 ClassC
。有没有办法只用 1 个 require 语句导入所有类?还是我必须指定我想要的每个类?
我在想是否有一个 javascript 等价物,我在一个文件夹中定义了 1 个 index.js
文件,该文件执行多个 modules.export
语句以导出所有函数和类。
以下 repl 描述了整个设置...
感谢您的帮助!
解决方法
感谢 Discord 上的 Crystal Programming 社区(值得加入 - 感谢来自服务器的 Blacksmoke16 和 jack arthur),我想出了这个解决方案:
main.cr
require "./**"
ModuleA.who_am_i()
ModuleB.who_am_i()
instanceB = ModuleB::ClassB.new
instanceB.who_am_i()
ModuleC.who_am_i()
instanceC = ModuleC::ClassC.new
instanceC.who_am_i()
尽管它不如 Node 优雅,但它可以胜任。
感谢@matthewm(在 Discord 服务器上):
此解决方案要求所有文件和嵌套文件开始 从目录中,需要的文件所在的目录。你的一个问题 可能会遇到这样的情况,那就是你默认了 需要任何晶体选择的顺序。如果你有一个 module_c 取决于 module_b 但你确实需要 ./**,Crystal 可能会尝试 在module_b之前需要module_c,它会失败,所以你需要 要么总是直接以正确的顺序要求文件,要么 在一次要求所有内容之前单独要求文件:
require "./module_b"
require "./**" # files in here depend on module_b to be loaded first
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。