【问题标题】:Effective D : best practices and design patterns有效的 D:最佳实践和设计模式
【发布时间】:2013-06-15 19:40:40
【问题描述】:

关于D-Specific Design Patterns 举行了一场非常有趣的会议,在 D 社区中,一些人认为这可能是 book 讨论有效编码技术的起点。其他人则认为现在还为时过早,因为没有多少人拥有 丰富的经验,这样一本书的作者会对有效性的概念有一些偏见/个人的欣赏。 SO 是一种更具交互性的媒体(有其局限性)。因此,等待“Effective D”的出现,如果我们能分享一些(致命的)建议/技术/模式以使 D 代码看起来更好,那就太好了。我认为如果答案会更清楚:

  • 展示一种独特的技术
  • 本质上是一段注释代码
  • (如果太大)只是代码的链接(公共要点...)

【问题讨论】:

  • 可能应该作为“社区维基”问题来代替。
  • 有没有办法“转换”问题?
  • 也许有足够高声望的人可以做到。
  • 对列表的请求在这里被认为是题外话
  • 希望如果它是一个 wiki 它不是...在我看来,很多成功的问题产生了一个评分答案列表(即使它不是那么清楚地表达,但如果它是一个语义问题也许我可以解决这个问题)。此外,我确信 d 标签构成了 SO 的一个如此遥远的部分,以至于只对这个元级别感兴趣的道德守护者不会那么多。v

标签: d phobos


【解决方案1】:

我的blog123)上有一些 D Tip 帖子。

这是一个:Testing With TypeTuple


在测试函数时,通常最好使用一系列不同的输入对其进行测试。为此,您可以轻松地在输入值数组上使用 for 循环,但如果您的输入是一个类型(通常是模板代码)怎么办?

D 编程语言允许您对 TypeTuple 进行迭代,因此您只需声明一个包含所有要测试的类型的元组,并以正常方式对其进行迭代:

import std.typetuple;
alias TypeTuple!(int, long, double) Types;
foreach (T; Types)
    test!T();

您可能想知道这会编译成什么。毕竟,循环的主体随着 T 而变化,因此生成的代码也必须在每次迭代中发生变化。编译器是如何处理的?

答案是循环完全展开。上面的代码实际上是一样的:

test!int();
test!long();
test!double();

因此,您可能需要注意 TypeTuples 的大小,以避免代码膨胀。

【讨论】:

  • 很棒的提示!尤其是关于在泛型代码中使用范围的兴趣,通过微妙的字符串类型的例子。
【解决方案2】:

https://p0nce.github.io/d-idioms/ 下可以找到一组 d 成语/模式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多