Scala 3集合转换疑似Bug?PyList调用asScala失败问题
Scala 2与Scala 3中PyList调用asScala的差异问题
Scala 2.13.14测试
执行命令启动Scala环境:
scala-cli -j system -S 2.13.14 --dep org.python:jython-standalone:2.7.1b3
在交互环境中执行代码,可正常调用asScala:
scala> val x = new org.python.core.PyList val x: org.python.core.PyList = [] scala> import scala.jdk.CollectionConverters._ import scala.jdk.CollectionConverters._ scala> x.asScala val res0: scala.collection.mutable.Buffer[_] = Buffer()
Scala 3.3.3测试
执行相同启动命令:
scala-cli -j system -S 3.3.3 --dep org.python:jython-standalone:2.7.1b3
在交互环境中执行代码时出现错误:
Welcome to Scala 3.3.3 (21.0.3, Java OpenJDK 64-Bit Server VM). Type in expressions for evaluation. Or try :help. scala> val x = new org.python.core.PyList val x: org.python.core.PyList = [] scala> import scala.jdk.CollectionConverters.* scala> x.asScala -- [E008] Not Found Error: ----------------------------------------------------- 1 |x.asScala |^^^^^^^^^ |value asScala is not a member of org.python.core.PyList 1 error found
关键说明
PyList是java.util.List的包装类,其Java定义如下:
public class PyList extends PySequenceList implements List { .... }
测试Scala 3最新版本3.4.2时,该问题依旧存在。
临时解决方案
通过冗余类型转换可绕过该问题:
x.asInstanceOf[java.util.List[_]].asScala
内容的提问来源于stack exchange,提问作者david.perez
相关产品推荐
相关产品推荐

