2012-11-16 25 views
5

Hãy tưởng tượng tôi có định nghĩa lớp sau đây:By-tên loại thông số

class Foo[T] 

và tôi muốn làm như sau

def bar(x:Foo[ =>Int ]):Int = ??? 

Nhưng biên dịch không thành công với "không bằng tên tham số kiểu cho phép ở đây "

Tôi làm cách nào để sử dụng loại tên theo loại làm thông số loại cho một phương pháp chung?

Trả lời

9

Bạn sẽ phải cung cấp trình bao bọc lười của riêng mình. Một cái gì đó như thế này:

class Lazy[T](wrp: => T) { 
    lazy val value: T = wrp 
} 

và sau đó:

def bar(x: Foo[Lazy[T]]): Int = ??? 
+0

gì về lớp 'Lazy [T] (giá trị val: => T)'? Không cần phải lặp lại giá trị chủ sở hữu. – pedrofurla

+3

@pedrofurla. không được phép (tham số val có thể không được gọi theo tên). Và nếu nó được, vào những thời điểm nào giá trị được cho là sẽ được khởi tạo? –

+1

Lạ. Không biết điều đó. Tôi cho rằng họ sẽ được gọi là init-ed lúc đầu. – pedrofurla

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