通用数字文字

Mai*_*ein 3 d

bool isUnit(Vec)(in Vec v, float tolerance = kindaSmallNumber){
    import std.math: abs;
    import std.conv: to;
    auto length = v.lengthSquared;
    return abs(to!(typeof(length))(1) - length) < tolerance;
}
Run Code Online (Sandbox Code Playgroud)

这里我只想计算,1 - length但长度可以是double或float类型.我不想将1从整数转换为float或double在运行时.

我必须做to!(typeof(length))(1) - length或者我能做什么,1 - length并且1总是和长度一样?

Ada*_*ppe 5

1的类型与那里无关.它将自动转换为适当的长度算术类型.

来自http://dlang.org/spec/expression.html#AddExpression

如果任一操作数是浮点类型,则另一个操作数被隐式转换为浮点数,并通过通常的算术转换将它们带到一个公共类型.

因此,无论如何它都是由编译器自动完成的(当然,在编译时知道btw,所以它不会在这里做任何运行时的东西).

但对于想要了解特定问题答案的其他人,您可以使用类型化的文字1.0或类型构造函数typeof(length)(1).