命名约定:火卫一是如何组织的



我正在制作我自己的小函数库,我试图遵循Phobos的命名约定,但我真的很困惑。我怎么知道东西放哪?

例子:

如果Phobos中有一个像foldRight这样的函数(基本上是相反方向的reduce),我会在哪个模块中找到它?

我能想到几个:

  • std.algorithm:因为它表达了一个算法
  • std.array:因为我可能会在数组
  • 上使用它
  • std.container:因为它用于容器,而不是单个对象
  • std.functional:因为它主要用于函数式编程
  • std.range:因为它也在range上运行

但是我不知道哪一个是好的选择——我可以给出至少3个令人信服的理由。

约定是什么?

  • std.algorithm:是的,你可以实现像reduce!fun(retro(r))

    此模块指定在序列

  • 上运行的算法
  • std.array:不,因为它也可以运行在其他范围

    这些是只在内置数组上运行的辅助函数

  • std.container:不,因为它没有定义数据结构(如树集)

    这定义了语言中没有内置的数据结构(现在是链表,二叉树和内存管理方面的确定性数组)

  • std.functional: no,因为它不是在一个函数上操作,而是在一个范围上操作

    这个接受一个函数并返回一个不同的函数

  • std.range:不,因为它没有定义一个范围或提供一种不同的方式来迭代一个

缺乏清晰的结构是我对phobos库TBH的不满之一,但真正阅读文档的第一段应该会告诉你在哪里放置函数