p*****2 发帖数: 21240 | |
c******o 发帖数: 1277 | 2 很多原因了。
第一是为了和java interact, 要是只有FP, 很多type feature都不用,要是只有OO,也
是type feature都不用。要是两个都有,那就不是1+1=2了。
第二是因为本来这个是一个语言研究,想做的高大上, 做的很牛,scala type system
是 turing complete, 理论上是什么都可以实现的一门独立语言。shapeless 就是利用
这个的一个library.
不过,
第一你不会都用到的,不用的就别学了,就学
Abstract Types
Type Bounds
Variances
第二啥自从商业化以后, scala的方向就是越来越简单,下一次大概可能就会砍type
system的feature. |
b***e 发帖数: 1419 | 3 Haskell's type system 不复杂么?
【在 p*****2 的大作中提到】 : 有很大程度都是因为继承搞得吧
|
c******o 发帖数: 1277 | 4 比scala的其实简单一些。
【在 b***e 的大作中提到】 : Haskell's type system 不复杂么?
|
b***e 发帖数: 1419 | 5 我个人的感觉是implicit parameters and type/constructor classes其实还是很复杂
的,不过一般人不会deep dive。还有就是GADT。Haskell里面搀的东西太多了。作为教
材是合适的。但是如果有一条实用路的话,还是scala比较接地气。
【在 c******o 的大作中提到】 : 比scala的其实简单一些。
|
n*w 发帖数: 3393 | 6 这两者是不是可以用来实现类似于duck type又是强类型的调用?
【在 b***e 的大作中提到】 : 我个人的感觉是implicit parameters and type/constructor classes其实还是很复杂 : 的,不过一般人不会deep dive。还有就是GADT。Haskell里面搀的东西太多了。作为教 : 材是合适的。但是如果有一条实用路的话,还是scala比较接地气。
|
b***e 发帖数: 1419 | 7 你这个说法有点儿意思。一般来讲duck type和strongly typed是不两立的。但是你这
个说法确实有意义。其实GADT的本质是吧runtime type identification变成了一个
first class value。在Java里可以说
o instanceOf Integer
如果用GADT的方式就变成了
o.type == rttiOfInteger
GADT的expressiveness在于等式的右侧可以是variable, like
o.type == rttiOfSomeType
而instanceof的右侧只能是一个type, which is not a first class value。
GADT还有一个好处是type constructor也可以有rtti as first class (higher order)
value。For instance:
o.type == rttiOfArray(rttiOfInteger)
这就是判断o的type是不是[Int]。我印象里Java的rtti由于历史原因无法支持higher
order values。
【在 n*w 的大作中提到】 : 这两者是不是可以用来实现类似于duck type又是强类型的调用?
|
w**z 发帖数: 8232 | 8 我报了个Scala day training, Fast Track to Scala, 应该是给我这种scala 零基
础的
【在 p*****2 的大作中提到】 : 有很大程度都是因为继承搞得吧
|
l******t 发帖数: 55733 | 9 scala有。可以去看下using的实现
【在 n*w 的大作中提到】 : 这两者是不是可以用来实现类似于duck type又是强类型的调用?
|
p*****2 发帖数: 21240 | 10
跟我有overlap吗?
【在 w**z 的大作中提到】 : 我报了个Scala day training, Fast Track to Scala, 应该是给我这种scala 零基 : 础的
|
w**z 发帖数: 8232 | 11 我周四周五。你住哪?
【在 p*****2 的大作中提到】 : : 跟我有overlap吗?
|