有没有办法限制特征,使其只能混合到对象中?例如
trait OnlyForObjects {
this: ... =>
}
object Foo extends OnlyForObjects // --> OK
class Bar extends OnlyForObjects // --> compile error
Run Code Online (Sandbox Code Playgroud) 如何apply()从Scala.js代码调用Javascript对象上定义的函数?
显而易见的解决方案不起作用,因为applyScala.JS(?)总是将其编译到其父对象的函数调用中:
var test = {
apply: function(idx) {...},
apple: function(idx) {...}
}
Run Code Online (Sandbox Code Playgroud)
trait Test extends js.Object {
def apple(idx: Int) : Int = ???
def apply(idx: Int) : Int = ???
}
val test = js.Dynamic.global.test.asInstanceOf[Test]
test.apple(1) // works, of course
test.apply(1) // does not work (seems to be compiled into the call test(1) ?)
js.Dynamic.global.test.apply(1) // does not work either
Run Code Online (Sandbox Code Playgroud)