添加基函数vs在Julia中使用唯一函数名
我正在向Julia移植一个库,我很好奇从模块中添加基函数的最佳实践是什么 此库包含诸如添加基函数vs在Julia中使用唯一函数名,julia,Julia,我正在向Julia移植一个库,我很好奇从模块中添加基函数的最佳实践是什么 此库包含诸如values(t::MyType)和keys(t::MyType)之类的函数,这些函数采用唯一的结构类型,但实际上不执行与基函数相同的操作或返回与基函数相同的类型 在这种情况下,最佳做法是什么 只需添加Base.values(t::MyType)和Base.keys(t::MyType)函数,就可以不用前缀使用它们 将函数名更改为MyType\u键(t::MyType)和MyType\u值(t::MyType
values(t::MyType)
和keys(t::MyType)
之类的函数,这些函数采用唯一的结构类型,但实际上不执行与基函数相同的操作或返回与基函数相同的类型
在这种情况下,最佳做法是什么
- 只需添加
和Base.values(t::MyType)
函数,就可以不用前缀使用它们Base.keys(t::MyType)
- 将函数名更改为
和MyType\u键(t::MyType)
MyType\u值(t::MyType)
- 使用它们的原始名称,并要求它们的前缀为
和MyModule.values(t)
MyModule.keys(t)
keys
确实被广泛使用-您可以使用它,但必须在模块内部以Base.
作为它的开头)
选项2总是安全的,特别是如果你能找到一个比“我的钥匙”更好的名字的话。但是我认为如果函数在概念上做着相同的事情,最好使用相同的名字,因为它可以大大简化用户体验。你可以假设大多数用户都知道基本函数,如果这是直观的,可以尝试它们。扩展基函数您应该让它们在概念上做同样的事情。此外,您应该只扩展基函数,以便在您自己的包中定义的类型上进行分派。规则是您可以为外部(例如,基或其他包)定义方法为自己的类型定义函数。或者为外部类型定义自己的函数。但为外部类型上的外部函数定义方法是“类型盗版” 考虑到您将在自己的类型上定义它们,只要函数在概念上是相同的,返回值不同就不是问题 对于选项2或选项3,您可以同时执行这两项操作。选项3要求您不显式导入基函数(在这种情况下,您将通过定义新方法而不是定义同名的新函数来扩展基函数),不导出基函数,并且很可能不在模块内使用基函数(例如,
keys
确实被广泛使用-您可以使用它,但必须在模块内部以Base.
作为它的开头)
选项2总是安全的,特别是如果你能找到一个比my_keys
更好的名称。但是我认为如果函数在概念上做相同的事情,最好使用相同的名称,因为它可以大大简化用户体验。你可以假设大多数用户都知道基本函数,如果这是直观的,可以尝试它们