8

Theo tôi biết, các đặc điểm như List hoặc Seq được triển khai trong thư viện chuẩn Scala thay vì là một phần của ngôn ngữ.Chức năng Scala variadic và Seq

Có một điều mà tôi không hiểu, mặc dù: một có một cú pháp cho các chức năng variadic trông giống như

def foo(args: String*) = ... 

Bên trong người ta có quyền truy cập vào args và nó sẽ là một Seq.

Nó không phải là rõ ràng với tôi cho dù:

  • Seq được coi là một cấu trúc dữ liệu đặc biệt, đủ để xuất hiện như một phần của ngôn ngữ, hoặc
  • các * ký hiệu đây là một trường hợp đặc biệt của một tổng quát hơn cú pháp quản lý để tránh bất kỳ tham chiếu đến các giao diện cấu trúc dữ liệu cụ thể.

Có ai biết đó là thông tin chính xác không?

Trả lời

12

Nó thực sự là một 'mờ' giữa ngôn ngữ và thư viện. Các trạng thái v2.9 Scala Language Specification trong §4.6.2 thông số lặp lại:

Tham số giá trị cuối cùng của một phần thông số có thể được kèm theo cụm “*”, ví dụ (..., x: T *). Loại tham số lặp lại như vậy bên trong phương pháp sau đó là loại trình tự scala.Seq[T].

Vì vậy, khi bạn sử dụng đối số lặp lại, giả định rằng scala.Seq có sẵn khi chạy (trường hợp này là một phần của thư viện chuẩn).

1

Tôi nghĩ đây là lần đầu tiên. Có một vài loại ngôn ngữ yêu cầu tồn tại mặc dù chúng không thực sự là một phần của ngôn ngữ. Với Seq bạn tìm thấy một.

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