我正在将一个库移植到Julia,我很好奇从模块中添加Base函数的最佳实践.
这个库包含类似的函数values(t::MyType),keys(t::MyType)它们采用独特的结构类型,但实际上并不执行相同的操作或返回与Base函数相同的类型
在这种情况下,最佳做法是什么?
Base.values(t::MyType)和Base.keys(t::MyType)功能,即可在不带前缀的情况下使用它们.my_type_keys(t::MyType)和my_type_values(t::MyType)MyModule.values(t)和前缀MyModule.keys(t)如果你扩展Base函数,你应该瞄准它们在概念上做同样的事情.此外,您应该只扩展Base函数以在您自己的包中定义的类型上进行调度.规则是您可以为您自己的类型定义外部(例如Base或其他包的)函数的方法.或者为外部类型定义自己的函数.但是,在外部类型上定义外部函数的方法是"类型盗版".
鉴于您要在自己的类型上定义它们,只要函数的概念相同,返回值就不同也不是问题.
关于选项2或3,您可以同时执行这两项操作.选项3要求您不要显式导入Base函数(在这种情况下,您将通过定义新方法而不是定义具有相同名称的新函数来扩展它们),不要导出它们,并且很可能是你不会在你的模块中使用Base函数(keys例如,它实际上被广泛使用 - 你可以使用它,但必须Base.在模块内部加上它).
选项2总是安全的,特别是如果你能找到比它更好的名字my_keys.但我认为最好使用相同的名称,如果功能在概念上做同样的事情,因为它大大简化了用户体验.您可以假设大多数用户都会知道基本功能,如果这很直观,可以尝试使用它们.
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |