作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作者说: def foo[A](fst: List[A], snd: List[A]): List[A]
There are fewer ways we can implement the function. In particular, we can’t just hard-code some elements in a list, because we have no ability to manufacture values of an arbitrary type.
这个我没看懂,因为也在[Char]
版本我们无法制造任意类型的值,我们必须拥有 [Char]
类型的值那么为什么实现这个的方法更少呢?
最佳答案
在通用版本中,您知道输出列表只能包含 fst
和 snd
中包含的元素的一些排列,因为无法构造新值一些任意类型 A
。相反,如果您知道输出类型是 Char
,您可以例如
def foo(fst: List[Char], snd: List[Char]) = List('a', 'b', 'c')
此外,您不能使用输入列表中包含的值来做出影响输出的决策,因为您不知道它们是什么。如果您知道输入类型,则可以执行此操作,例如
def foo(fst: List[Char], snd: List[Char]) = fst match {
case Nil => snd
case 'a'::fs => snd
case _ => fst
}
关于scala - 在不够多态的情况下,为什么实现 `List a -> List a -> List a` 的方法比 `List Char -> List Char -> List Char` 少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40043526/
我是一名优秀的程序员,十分优秀!