6

除了潜在的名称冲突(可以通过其他方式解决)之外,仅从您需要的模块中导入部分是否有任何好处:

import SomeModule (x, y, z)

...诗句只是导入所有内容,更简洁,更易于维护:

import SomeModule

例如,它会使二进制文件更小吗?

4

2 回答 2

11

名称冲突和二进制大小优化只是您可以获得的两个好处。实际上,始终确定您想从代码的外部世界中获得什么是一种很好的做法。因此,每当人们查看您的代码时,他们都会知道您的代码到底要求什么。

这也为您提供了一个很好的机会来创建用于测试的模拟解决方案,因为您可以处理导入列表并为它们编写模拟。

不幸的是,在 Haskell 中,类型类实例并不那么容易。它们是隐式导入的,因此可能会产生冲突,也可能会使模拟变得更加困难,因为无法仅指定特定的类实例。希望这可以在 Haskell 的未来版本中得到修复。

更新

我上面列出的好处(代码维护和测试模拟)不仅限于 Haskell。实际上,据我所知,这也是 Java 中的常见做法。在 Java 中,您可以只导入单个类,甚至可以导入单个静态变量/方法。不幸的是,您仍然不能有选择地导入成员函数。

于 2013-10-24T00:03:04.867 回答
6

不,这只是为了防止名称冲突。另一种防止名称冲突的机制——即import qualified——导致代码更冗长(可读性更差)。

它不会使二进制文件更小 - 考虑到给定模块中的函数通常都相互引用,因此它们需要一起编译。

于 2013-10-23T23:12:07.163 回答