在水晶中使用模块

随着你的应用程序的增长,你想从一个大的.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

采样宏