2016-08-29 2 views
1

자바 스크립트 라이브러리는 다음처럼 객체 이름에 콜론을 갖는 개체 리터럴 :Scala.js이 : 키는 내가 예상하는을 사용하고

{ 
    "paren:action": ... 
} 

당신이 볼 수 있듯이, 이름에 콜론이있다 키/속성. 이름을 따옴표로 묶어야하는 이유입니다. 순간 , 나는 Scala.js를 사용하여 동일한 객체를 생성 할 노력하고있어 : 그들없이, 그것도 컴파일되지 않기 때문에 이미 다시 사용하고

@JSExport 
def create() = { 
    literal(`paren:action` = ...) 
} 

틱. 그러나 결과 개체의 이름이 예상 한 것과 다릅니다. (크롬 콘솔에서 실행)

예 :

var a = { "paren:action": ... }; 
"paren:action" in a; // => true 
Object.keys(a); // => ["paren:action"] 

var b = ScalaJsApp().create(); 
"paren:action" in b; // => false 
Object.keys(b); // => ["paren$colonaction"] 

어떻게이 문제를 해결할 수 있습니까? 이 문제를 해결하려면

답변

2

가장 쉬운 해결책은 js.Dictionary 사용하는 것입니다 물론 이것은 또한 literal와 함께 작동합니다

def create() = { 
    js.Dictionary("paren:action" -> ...) 
} 

을하지만 때문에 불쾌한 컴파일러 내부 세부 사항에,하지 않습니다 paren$colonaction 방법 스칼라입니다 컴파일러는 내부적으로 이름이 paren:action이며, 주로 JVM 바이트 코드에서 허용되는 문자의 제한으로 인해 나타납니다.

+0

감사합니다. 매력처럼 작동합니다. 알아 둘만한! – ceran