怎么处理两个库同时使用同名函数的问题?


#1

比较好奇大家都倾向于怎么解决这个问题?

和上面的问题里稍微有点不同的是,现在假如我现在开发了一个库A包含函数foo,但用户经常用的一个库B也包含同名函数foo,然而我写的库A并不依赖于B,该怎么办比较好?

  • 引入库B,重载foo(尽管我并不用B)
  • 不管了,让用户自己重命名去

0 投票者


#2

没关系吧,这两个函数一般参数应该不一致,会重载的。
除非连个函数的名称和参数一样的。
实在不行,让用户用import啊。


#3

使用 A.foo 以及 B.foo。module本身就是为了解决这样的问题。就比如C++的namespace一样。或者类比一下python,using在Julia里面的意思差不多就是 from xxx import * 而已(Python的export列表写在一个list里,而Julia提供了更方便的关键字)


#4

此外,对于语义相同的重载。例如B里的foo在实际场景里确实和A里的foo有着类似的意义,然后B里的foo只是对其它类型的方法(这个类型一定是在B里的),那么选择重载A里的方法更好。过去一些大型Julia项目的做法是建一个org然后有一个XXXBase.jl的库定义这些公共接口。现在似乎不流行这么做了,但是用另外一个package里面的接口还是常见的。


#5

我们永远无法预测用户未来会用什么库,以及什么函数名会撞车,所以只能由用户来解决。