Trong Scala, tôi có thể làm cho một caseclass, case class Foo(x:Int)
, và sau đó đặt nó trong một danh sách như vậy:Nhà điều hành '::' của Scala, nó hoạt động như thế nào?
List(Foo(42))
Bây giờ, không có gì lạ ở đây. Sau đây là lạ với tôi. Nhà điều hành ::
là một chức năng trong danh sách, phải không? Với bất kỳ chức năng nào với một đối số trong Scala, tôi có thể gọi nó bằng ký hiệu infix. Ví dụ là 1 + 2
là một hàm (+)
trên đối tượng Int
. Lớp học Foo
Tôi vừa xác định không có nhà điều hành ::
, vậy làm cách nào có thể làm như sau?
Foo(40) :: List(Foo(2))
Trong Scala 2.8 RC1, tôi nhận được kết quả sau từ dấu nhắc tương tác:
scala> case class Foo(x:Int)
defined class Foo
scala> Foo(40) :: List(Foo(2))
res2: List[Foo] = List(Foo(40), Foo(2))
tôi có thể tiếp tục và sử dụng nó, nhưng lời giải thích là gì?
Nó cũng áp dụng cho việc truyền tham số kiểu để gõ các hàm tạo. Hãy nói rằng bạn có một trường hợp lớp :: [H, T] (đầu: H, đuôi: T); và lớp SomeType [A]; thì bạn có thể thực hiện cả SomeType mới [:: [String, Int]] ("a", 3) và SomeType mới [H :: T] ("a", 3) – lisak