2011-12-22 24 views
5

Tại sao sản phẩm của Scala TupleTrình khởi động lại loại Iterator [Any]?Tại sao sản phẩm Máy đổi trả lại loại Iterator [Có]?

Ví dụ nếu Tuple3 hoặc Product3 productIterator sau định nghĩa

def productIterator[T1<:X,T2<:X,T3<:X,X] = Iterator(_1,_2,_3) 

sau Biểu hiện có thể trở lại Iterator [java.lang.Number]

(BigInt(1),new java.lang.Long(2),new java.lang.Float(3)).productIterator 

Nhưng hiện tại phiên bản scala (2.9.1) không phải là vì thế . Có lý do gì không?

Trả lời

2
% scala3 -Xexperimental 
Welcome to Scala version 2.10.0.rdev-4056-2011-12-21-g69ed0a9 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> case class Foo[T1 <: java.lang.Number, T2 <: java.lang.Number](s: T1, t: T2) 
defined class Foo 

scala> Foo[java.lang.Integer, java.lang.Long](5, 5L) 
res1: Foo[Integer,Long] = Foo(5,5) 

scala> res1.productIterator _ 
res2:() => Iterator[Number] = <function0> 

CẬP NHẬT

Nó là đơn giản nhất trên ràng buộc các loại (unerased) các yếu tố sản phẩm. Ví dụ trong một Product[T, U, V] đó là loại giống như một biểu

if (cond1) x1: T else if (cond2) x2: U else x3: V 

hoặc các loại danh sách trong

List(x1: T, x2: U, x3: V) 

Trong giao diện repl tại loại suy ra f trong

def f[T] = List(null: List[T], null: Set[T], null: Iterator[T]) 

để xem ý tôi là gì.

+2

Bạn có thể giải thích? Nó hoạt động vì 2,10 hay vì bạn chú thích giới hạn trên? – ziggystar

+0

scala3 -Xexperimental – extempore

+0

Oh tuyệt vời! thanks –

Các vấn đề liên quan