2013-11-26 3 views
1

Что не так с этим кодом?Цейлон не может применять некоторые функции к кортежам?

value x = [[1, Color(0)]]; 

//Exception thrown here 
value y = x.map(([Integer, Color] elem) => "``elem[0]`` -> ``elem[1]``"); 

... последняя строка может быть заменена следующим образом:

value y = { for(elem in x) "``elem[0]`` -> ``elem[1]``" }; 

... Я считаю, что они должны работать нормально, но в обоих случаях я получаю эту ошибку:

Ceylon run: java.awt.Color cannot be cast to com.redhat.ceylon.compiler.java. 
runtime.model.ReifiedType 
java.lang.ClassCastException: java.awt.Color cannot be cast to com.redhat.ceylon.compiler.java.runtime.model.ReifiedType 
    at ceylon.language.Tuple.$getElementType(Tuple.java:286) 
    at ceylon.language.Tuple.$getUnionOfAllType(Tuple.java:279) 
    at ceylon.language.Tuple.$getType(Tuple.java:266) 
    at ceylon.language.Tuple.$getType$(Tuple.java:257) 
    at ceylon.language.Tuple.$getElementType(Tuple.java:287) 
    at ceylon.language.Tuple.$getUnionOfAllType(Tuple.java:279) 
    at ceylon.language.Tuple.$getReifiedElement$(Tuple.java:102) 
    at ceylon.language.ArraySequence.map(ArraySequence.java:612) 
    at firstModule.run_.run(run.ceylon:11) 
    at firstModule.run_.main(run.ceylon) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at ceylon.modules.api.runtime.SecurityActions.invokeRunInternal(SecurityActions.java:61) 
    at ceylon.modules.api.runtime.SecurityActions.invokeRun(SecurityActions.java:51) 
    at ceylon.modules.api.runtime.AbstractRuntime.invokeRun(AbstractRuntime.java:89) 
    at ceylon.modules.api.runtime.AbstractRuntime.execute(AbstractRuntime.java:141) 
    at ceylon.modules.api.runtime.AbstractRuntime.execute(AbstractRuntime.java:126) 
    at ceylon.modules.Main.execute(Main.java:69) 
    at ceylon.modules.Main.main(Main.java:42) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.jboss.modules.Module.run(Module.java:270) 
    at org.jboss.modules.Main.main(Main.java:294) 
    at ceylon.modules.bootstrap.CeylonRunTool.run(CeylonRunTool.java:208) 
    at com.redhat.ceylon.common.tools.CeylonTool.run(CeylonTool.java:343) 
    at com.redhat.ceylon.common.tools.CeylonTool.execute(CeylonTool.java:283) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.redhat.ceylon.launcher.Launcher.run(Launcher.java:89) 
    at com.redhat.ceylon.launcher.Launcher.main(Launcher.java:21) 
+0

Использование итеративного синтаксиса, т.е. 'value x = {[1, Color (0)]};' вместо 'value x = [[1, Color (0)]];', решает проблему ... но все же, я думаю, что она должна работать независимо , – Renato

+0

Я пробовал это с кодом только Ceylon, и проблема уходит ... кажется, проблема Java-interop (обратите внимание, что Color относится к java.awt.Color). – Renato

ответ

1

Сообщите об этом как о проблеме с языковым модулем на Цейлоне, здесь:

https://github.com/ceylon/ceylon.language/issues

Ошибка является результатом того, что Color - это класс Java, а не класс Ceylon.

+0

Хорошо, я создал билет ... Я не смог найти его после того, как создал его, нужно ли его «одобрить», прежде чем он станет общедоступным? – Renato

+0

Здесь: https://github.com/ceylon/ceylon.language/issues/365 –