来自 Python 背景,我习惯于在运行时将类型作为对象提供。有了这一点,再加上至少在int
和float
这些类型的对象也恰好是充当解析器的可调用对象(例如int("234") == 234
,像 Scala's "234".toInt == 234
)的事实,我可以想出一个解决方案来解析,比如说,一个矩阵文本文件中的整数或浮点数。我唯一要做的就是配置一个参数:
ITEM_TYPE = int # or float
我很高兴:
with open('matrix.dat') as f:
matrix_data_raw = parse_raw_matrix(f.read())
matrix = [map(ITEM_TYPE, row) for row in matrix]
将值更改ITEM_TYPE
为立即在运行时float
给我一个list
of s(没有静态类型,但的内容仍然强类型为要么或)。list
float
matrix
list[list[int]]
list[list[float]]
在 Scala 中,我期望的静态类型matrix
是例如,Matrix[Int]
或者Matrix[Double]
(来自,比如说,更一般的type Matrix[T: Numeric] = Vector[Vector[T]]
)。但是,作为 Scala 的相对初学者,我对如何实现这一点有点迷茫。没有明显/简单的方法可以将参数的值从切换classOf[Int]
到classOf[Double]
- 即使我这样做并相应地动态选择解析器函数(这很简单),我将如何更改运行时类型matrix
from,比如说Matrix[Int]
,Matrix[Double]
? 我必须将静态类型声明matrix
为-<code>Matrix[Numeric] 吗?
在你判断这个问题的天真之前,我承认我知道 Scala 的解决方案可能需要一种不同的方法,但我只是喜欢从(IMO 相当优雅的)Python 开始我的想法的想法解决方案。