2013-02-13 45 views
6

Tôi đã nhìn thấy một số ví dụ về mã sử dụng ký hiệu "Đó" với Generics. tức làBiểu tượng "Điều đó" có ý nghĩa gì trong Scala

def map[B, That](f : (A) => B) : That 

Nhưng, do thiếu khả năng google của từ đó, tôi không thể tìm thấy bất kỳ tài liệu nào về cách sử dụng hoặc cách tôi sử dụng.

Đơn giản chỉ là trình giữ chỗ loại bình thường, hay nó làm điều gì đó đặc biệt?

+3

đó là trình giữ chỗ - có –

Trả lời

13

Mọi số nhận dạng bên trong [...] được coi là thông số loại.

Vì vậy, trong trường hợp def map[B, That](f : (A) => B) : ThatThat chỉ có nghĩa là loại trả lại chung. Thay thế nó bằng Z ví dụ: def map[B, Z](f : (A) => B) : Z sẽ có cùng tác dụng chính xác.

3

dịch Java, đó sẽ là:

public <B, That> That map(f: Function1<A, B>) 

Hoặc, nói cách khác, That là một generic (hoặc, trong Scala biệt ngữ, một số loại).

3

Đó là "trình giữ chỗ" khi bạn gọi nó (nghĩa là tham số kiểu); quy ước trong thư viện bộ sưu tập là sử dụng That để trình bày loại bộ sưu tập sẽ được tạo. (Do đó, bạn chuyển đổi từ this thành That.)

+0

Gọi nó là "trình giữ chỗ" có tính gây hiểu lầm tốt nhất. Đó là một tham số kiểu chính thức giống như các tên đối số "thường xuyên" (giá trị) trong các định nghĩa phương thức là các tham số chính thức. Đó là đối tác cấp loại cho một đối số cho một phương thức. –

+0

@RandallSchulz - Thật vậy, nhưng đó là những gì OP gọi nó. Tôi đã sửa đổi câu trả lời của mình để nói nó là gì và gợi ý rằng "trình giữ chỗ" không phải là thuật ngữ chính xác về mặt kỹ thuật. –

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