2010-09-02 21 views
9

Có ai biết một số nền tảng, tại sao Scala và C# sử dụng mũi tên kép (=>) cho lambdas thay vì mũi tên đơn (->)?Tại sao lại có mũi tên kép cho Scala và C# lambdas?

mũi tên Độc thân là phổ biến hơn trong văn học, được sử dụng trong Haskell, O'Caml, F #, Groovy vv và IMO nó cũng có vẻ đẹp hơn :)

+6

ML tiêu chuẩn cũng sử dụng '=>'. –

+6

Có lẽ (ít nhất là trong C#) để tránh nhầm lẫn với toán tử lời gọi thành viên con trỏ C++ với cùng biểu tượng. –

Trả lời

15

Pizza, đó là sắp xếp của một người tiền nhiệm cho Scala có -> trong các loại chức năng. Tôi nhớ rằng các lập trình viên C++ đã bị bối rối bởi sự lựa chọn biểu tượng này. Đó là lý do chính tại sao Scala chọn => AFAIRC. Có vẻ như các C# guys đã trải qua cùng một lý luận.

+2

Vâng, các C# guys không thể sử dụng '->' mũi tên bởi vì nó có nghĩa là cùng một điều trong C# mà nó làm trong C + +. Vì Pizza và Scala không có toán tử dereference, nên nó không hoàn toàn giống như lý do. – Gabe

+1

Đây phải là câu trả lời đúng cho ít nhất một nửa số câu hỏi. – ziggystar

21

Trong C#, có lẽ vì -> điều hành đã được sử dụng trong trường hợp mã không an toàn (LINK)

+0

điều này làm cho cảm giác hoàn hảo! – Aivar

+0

Tôi khá chắc chắn ảnh hưởng của các ngôn ngữ chức năng khác đã có một phần lớn hơn để chơi trong thiết kế của Scala. C# chắc chắn không phải là lý do, thực tế là C# có cú pháp => cũng có thể dễ dàng có cùng một lý do. – gpampara

10

Trong Scala, cũng có "mũi tên bản đồ" cho biết ánh xạ từ một mục a đến một mục khác b. Sử dụng => để lambdas giải phóng -> cho những thứ như Map(1 -> "One", 2 -> "Two") và như những người khác đã chỉ ra => không phải là duy nhất đối với C# và Scala.

+6

Tất nhiên, bạn cũng có thể lý do rằng nếu họ đã sử dụng mũi tên bản đồ '=>' từ Perl, điều đó sẽ giải phóng mũi tên '->' cho lambdas. – Gabe

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