尽管它在sbt控制台中编译并运行.Intellij抱怨我应该在编辑器中使用Binding [Node]而不是Elem.
@dom def renderDiv: Binding[Div] = <div>...</div>
Run Code Online (Sandbox Code Playgroud)
从intellij IDEA的角度来看,此方法返回的Elem是一个子类型scala.xml.Node,但在渲染时:
dom.render(document.getElementById("root"),renderDiv)
Run Code Online (Sandbox Code Playgroud)
它需要一个org.scalajs.dom.raw.Node.
这有什么解决方法吗?
考虑这种情况:
STYLE1:
static enum Style1{
FIRE_BALL {
@Override
public boolean isCold() {
return false;
}
},ICE_BALL {
@Override
public boolean isCold() {
return true;
}
},FIRE_ARROW {
@Override
public boolean isCold() {
return false;
}
},ICE_ARROW {
@Override
public boolean isCold() {
return true;
}
};
public abstract boolean isCold();
}
Run Code Online (Sandbox Code Playgroud)
蓝紫魅力:
static enum Style2{
FIRE_BALL,ICE_BALL,FIRE_ARROW,ICE_ARROW;
public boolean isCold(){
//return this.toString().contains("ICE")?true:false; //sorry
return this.toString().contains("ICE");
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我只是想知道它是否冷.所以我要问:
编译器可以知道目标结果和常量折叠Style2吗?
如果没有,Style1应该显然更快,但更冗长.假设这是更复杂的情况,并且有更多的组合,例如BIG_FIRE_SLOW_BALL与isFast(),isBig(),Style1将以代码块结束.
所以我用jmh和jUnit做了一些测试:
与jmh:
@Benchmark
public boolean testStyle1() {
return Style1.values()[ThreadLocalRandom.current().nextInt(4)].isCold();
}
@Benchmark …Run Code Online (Sandbox Code Playgroud)