我对Julia很新;我的编程通常是用C ++,Python编写的,有时候用数字编写Fortran。我的理解是Julia缺少类似于C ++私有变量的东西(甚至是Python'我建议你将其视为私有"使用前导下划线的约定)。如果我有一个容器,有没有办法对我添加到容器的对象强制执行约束?
考虑一个例子:假设我想要一个整数数组,我的约束是数组中的所有整数必须共享一个大于1的最大公因子。因此,如果我将12放入数组中,则可以添加任何数字为2或3的倍数。所以我接下来添加21,最大的公共因子现在必须是3.如果我尝试添加26,我将得到一个错误,因为它违反了约束。但是,如果我添加12然后是26,那么这将是合法的,最大公因子为2。
我意识到这是一个人为的例子,但它应该具有我希望做的所有显着特征,并且需要较少的解释。
答案 0 :(得分:2)
只有immutable
类型才能实现真正的强制执行,您可以在其中检查内部构造函数中的任何所需约束。在类型定义之外,没有办法添加新的内部构造函数,如果有的话,你就无法在不经过实例的情况下创建实例。
然而,虽然Python中的约定是以_
开头的字段是私有的,但Julia中的一般约定是所有字段都是私有的(除非明确记录它们)。在类型的实现之外直接访问字段被认为是不好的风格,你通常应该有访问函数。