在水晶中使用模块
随着你的应用程序的增长,你想从一个大的.cr文件转移到将你的代码分离成小的文件。
你可以从你的主.cr文件中使用require来添加其他文件的代码。
要求"./tools/*"
这句话将从工具目录中添加代码,相对于你的主.cr文件。
这将有助于从 "物理 "上分离你的应用程序,但从逻辑上分离也是可取的--也许有些代码可以在其他项目中重复使用,也许你也想避免命名空间的碰撞。
什么是命名空间的碰撞?
如果一个方法或类的名称,或常量的名称在全局命名空间的不同源文件中使用了两次,你将会有一个碰撞。
编译器如何知道,在定义的两个方法/类中,你到底想要哪个?
为了避免命名空间的碰撞,你把你的代码分成模块。
比如说。
调试模块
类SampleClass
结束
SAMPLE_CONSTANT = "某个值"
macro samplemacro(some_variable)
#的一些宏代码
结束
1TP3你的代码在这里
结束
访问模块中的代码
现在你可以像这样访问代码(在需要定义模块的文件后)。
sampleinstance = Debug::SampleClass.new()
p Debug::SAMPLE_CONSTANT
Debug.samplemacro
请注意,宏是用". "的语法调用的,而不是用": "的语法。你可以把它看作是模块的一个方法。
包括模块
另一方面,如果你觉得额外的符号令人厌烦,你可以用它的方法名称来包含模块,就像这样。
包括Debug
那么你将能够访问方法、类、常量和宏,而不需要任何额外的符号--就像代码被复制和粘贴到你的其他源文件一样。
sampleinstance = SampleClass.new()
p SAMPLE_CONSTANT
采样宏