我在玩2.0模板系统上有点挣扎; 我有一个方法返回scala中的'Int',我想用"#,###"模式格式化它.
我曾尝试@order.itemCount().format("#,###")
和@( order.item.count() format "#,###" )
,但没有爱.
我不确定在播放模板语法中是否有一个技巧,或者我是否只需要学习如何在Scala中执行此操作.
我正在编写与R交互的Java代码,其中"NA"值与NaN值区分开来.NA表示值"统计上缺失",即无法收集或无法获得.
class DoubleVector {
public static final double NA = Double.longBitsToDouble(0x7ff0000000001954L);
public static boolean isNA(double input) {
return Double.doubleToRawLongBits(input) == Double.doubleToRawLongBits(NA);
}
/// ...
}
Run Code Online (Sandbox Code Playgroud)
以下单元测试演示了NaN和NA之间的关系,并在我的Windows笔记本电脑上运行良好,但"isNA(NA)#2" 有时在我的ubuntu工作站上失败.
@Test
public void test() {
assertFalse("isNA(NaN) #1", DoubleVector.isNA(DoubleVector.NaN));
assertTrue("isNaN(NaN)", Double.isNaN(DoubleVector.NaN));
assertTrue("isNaN(NA)", Double.isNaN(DoubleVector.NA));
assertTrue("isNA(NA) #2", DoubleVector.isNA(DoubleVector.NA));
assertFalse("isNA(NaN)", DoubleVector.isNA(DoubleVector.NaN));
}
Run Code Online (Sandbox Code Playgroud)
从调试开始,看起来DoubleVector.NA被更改为规范的NaN值7ff8000000000000L,但很难分辨,因为将它打印到stdout会给出与调试器不同的值.
此外,如果测试在之前的许多其他测试之后运行,则测试仅失败; 如果我单独运行这个测试,它总是通过.
这是一个JVM错误吗?优化的副作用?
测试总是传递:
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
测试有时会失败:
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java …
Run Code Online (Sandbox Code Playgroud) 我们的项目包含链接流畅风格的方法中的许多语句:
int totalCount = ((Number) em
.createQuery("select count(up) from UserPermission up where " +
"up.database.id = :dbId and " +
"up.user.id <> :currentUserId ")
.setParameter("dbId", cmd.getDatabaseId())
.setParameter("currentUserId", currentUser.getId())
.getSingleResult())
.intValue();
Run Code Online (Sandbox Code Playgroud)
我的checkstyle主要配置为匹配我们现有的代码样式,但现在它在这些代码片段上失败了,而是更喜欢:
int totalCount = ((Number) em
.createQuery("select count(up) from UserPermission up where " +
"up.database.id = :dbId and " +
"up.user.id <> :currentUserId ")
.setParameter("dbId", cmd.getDatabaseId())
.setParameter("currentUserId", currentUser.getId())
.getSingleResult())
.intValue();
Run Code Online (Sandbox Code Playgroud)
这完全不合适.反正配置checkstyle是否接受方法链接样式?是否有一个替代工具我可以从maven运行来强制执行这种缩进?
我有一个以接口为根的类层次结构,并使用抽象基类实现.它看起来像这样:
interface Shape {
boolean checkFlag();
}
abstract class AbstractShape implements Shape {
private boolean flag = false;
protected AbstractShape() { /* compute flag value */ }
public final boolean checkFlag() { return flag; }
}
interface HasSides extends Shape {
int numberOfSides();
}
interface HasFiniteArea extends Shape {
double area();
}
class Square extends AbstractShape implements HasSides, HasFiniteArea {
}
class Circle extends AbstractShape implements HasFiniteArea {
}
/** etc **/
Run Code Online (Sandbox Code Playgroud)
当我使用VisualVM对正在运行的代码进行采样时,似乎AbstractShape.checkFlag()从不内联并占用了总程序运行时间的14%,这对于一个简单的方法来说是个淫秽,即使对于一个经常调用的方法也是如此.
我在基类上标记了方法final,并且(当前)实现"Shape"接口的所有类都扩展了AbstractShape.
我能正确解释VisualVM样本结果吗?有没有办法说服JVM内联这个方法,还是我需要撕掉接口并使用抽象基类?(我不愿意,因为层次结构包括像HasFiniteArea和HasSides这样的接口,这意味着层次结构没有完美的树形式)
编辑:要清楚,这是一种在任何宇宙中 …
我正在使用dust.js来呈现有时长且包含下划线的变量名列表:
SUM_COUNT_LABOR_COUNTRIES_SMS_PAST
浏览器不会对下划线进行换行,因此它可能会变得难看.我希望我的灰尘模板在每个下划线后添加零宽度空间,以便浏览器可以包装它.这肯定属于模板层而不是模型,但我无法弄清楚如何使用dust.js正确实现这一点,而且它是将表示与逻辑分离的非常好的原则.
我是否创建了"帮手"功能?我在哪里放置辅助功能?我如何从模板中调用它?
java ×3
checkstyle ×1
dust.js ×1
javascript ×1
jvm ×1
jvm-crash ×1
maven ×1
optimization ×1
scala ×1