Lui*_*hys 6 arrays scala manifest context-bound
def bar[T: Manifest](a: Array[T]) = Array.ofDim[T](3)
class Foo
bar(Array(new Foo)) //Array[Foo] = Array(null, null, null)
Run Code Online (Sandbox Code Playgroud)
如上所示,清单似乎隐含地存在于任意类型中.
由于我们有一个上下文绑定,这意味着会有一些类型没有隐式Manifest - 它们是什么?
我不确定你的推论是否正确。我还没有见过没有清单的类型,但我见过类型推断器似乎无法提供清单的情况。
特别是在像这样的嵌套推理情况下:
scala> def bar[T: Manifest](a: Array[T]) = Array.ofDim[T](3)
bar: [T](a: Array[T])(implicit evidence$1: Manifest[T])Array[T]
scala> def bar2[T](a: Array[T]) = bar(a)
<console>:8: error: No Manifest available for T.
def bar2[T](a: Array[T]) = bar(a)
^
Run Code Online (Sandbox Code Playgroud)
看来除非清单被“传递”,否则它在较低级别上不可用 - 所以我们可以说
scala> def bar2[T: Manifest](a: Array[T]) = bar(a)
bar2: [T](a: Array[T])(implicit evidence$1: Manifest[T])Array[T]
Run Code Online (Sandbox Code Playgroud)
或者
scala> def bar2[T](a: Array[T])(implicit m: Manifest[T]) = bar(a)
bar2: [T](a: Array[T])(implicit m: Manifest[T])Array[T]
Run Code Online (Sandbox Code Playgroud)
然而我不知道为什么会出现这种行为。
| 归档时间: |
|
| 查看次数: |
2234 次 |
| 最近记录: |