Không phải là tôi đã thực sự đến gần giới hạn đó, nhưng tôi luôn tự hỏi: Tại sao họ dừng lại ở Function22
/Tuple22
. Giới hạn JVM? Lựa chọn tùy ý?Tại sao chức năng scala giới hạn ở 22 tham số?
Trả lời
Chức năng và các bộ được viết lại như các đối tượng bởi trình biên dịch, và chỉ Function0
qua Function22
và Tuple0
qua Tuple22
được xác định. Tôi nghĩ giới hạn 22 là hoàn toàn tùy ý, nhưng lý do có giới hạn thì không.
Hãy suy nghĩ theo cách này: để chạy ứng dụng Scala, các lớp cần thiết để chạy nó phải có mặt. Nếu trình biên dịch sẽ tự động tạo các lớp cho các hàm thì các lớp đó sẽ không được bao gồm trong thư viện JAR của thư viện Scala, vì vậy bạn sẽ phải bao gồm chúng trong ứng dụng của bạn. Điều đó có thể làm việc, nhưng sau đó bạn sẽ có vấn đề về tên của các lớp hoàn toàn đủ điều kiện: nếu chúng giống nhau cho tất cả các ứng dụng thì bạn sẽ có các xung đột vì các thư viện sẽ chứa cùng các lớp và nếu tên không phải là cùng bạn sẽ kết thúc với sự không tương thích - các hàm từ thư viện sẽ không giống như các hàm trong ứng dụng của bạn.
Nó thực sự là Tuple1 thông qua Tuple22, nhưng đó chỉ là một chi tiết nhỏ. –
@DarianLewin 'Tuple0' được gọi là 'Đơn vị' – Apocalisp
Vẫn không được thuyết phục là tại sao các lớp này không được tạo động bởi trình biên dịch. Vấn đề đặt tên và đóng gói có thể được giải quyết dễ dàng bằng cách tuân theo quy ước đặt tên. Không chắc chắn nếu tôi thiếu hình ảnh lớn. –
Lựa chọn tùy ý. Mặc dù các lớp này được tạo tự động, nhưng phải có giới hạn ở đâu đó.
Lưu ý rằng bạn có thể có một cái gì đó giống như "các bộ kích thước tùy ý" bằng cách sử dụng HLists hoặc cấu trúc tương tự (xem http://jnordenberg.blogspot.com/2008/08/hlist-in-scala.html)
Phần lớn là tùy ý, nhưng có là một số giới hạn cơ bản trên JVM quyết định mức giới hạn cần thiết.
Vấn đề chính là khớp mẫu trên các lớp chữ thường. Nếu một trường hợp được phép lớn hơn nhiều thì mã mẫu khớp được tạo ra có thể rất dễ dàng vượt quá kích thước phương thức hợp lệ tối đa. Mọi thứ khác (Sản phẩm, Chức năng, Tuple, ...) chỉ tuân theo giới hạn 22 thông số do đó được chọn cho các trường hợp.
Ngoài ra ... Nếu bạn đang viết các chức năng/bộ dữ liệu với> 22 thông số sau đó có lẽ bạn đang quá hạn cho một thiết kế lại :)
Không có giới hạn như vậy. Ngay cả khi các thư viện chuẩn chỉ định nghĩa đến Function22, bạn có thể định nghĩa Function23 nếu bạn cần nó, đến giới hạn JVM. Hoặc bạn có thể nhóm các đối số thành các bộ dữ liệu. Hoặc bạn chỉ có thể ngừng giả vờ rằng bất kỳ chức năng nào có nhiều hơn một đối số:
a => b => c => d => e => ...
Chức năng được thu thập có thể lấy nhiều đối số tùy thích.
- 1. Chức năng Ruby với số tham số không giới hạn
- 2. Tham số kiểu Scala giới hạn
- 3. Loại tham số với nhiều giới hạn
- 4. Tại sao đặt chức năng?
- 5. Hiểu "đối số kiểu không tuân theo giới hạn tham số kiểu" lỗi trong Scala
- 6. Giới hạn kích thước tham số JSON
- 7. Loại Scala: giới hạn trên ít nhất
- 8. thông số và chức năng quyền hạn
- 9. PHP str_replace() với tham số giới hạn?
- 10. Đối số chức năng: giới hạn trên so với lớp cha làm đối số?
- 11. Chức năng nâng trong scala
- 12. Tham số chức năng GetStringUTFChars
- 13. Tại sao chức năng Boost.Bind có thể được gọi với các tham số phụ?
- 14. so sánh chức năng trong giới hạn thấp hơn
- 15. Giới hạn Git Diff với một hoặc nhiều chức năng?
- 16. Tại sao các thông số chức năng của loại size_t?
- 17. Quá tải chức năng loại giới hạn trong Fortran 2003
- 18. Giới hạn hiệu năng JSF
- 19. Trong hàm Scala được tham số hóa này, tại sao tôi cần dàn diễn viên?
- 20. Nguyên mẫu JavaScript bị giới hạn chức năng?
- 21. Giới hạn sql trong CakePHP tìm chức năng
- 22. Giới hạn số tham số cho mỗi phương thức?
- 23. Scala gạch dưới - ERROR: thiếu kiểu tham số cho chức năng mở rộng
- 24. Chuỗi trong tham số chức năng
- 25. Giới hạn số hàng được trả về ở phía máy chủ (giới hạn bắt buộc)
- 26. Giới hạn matplotlib của Python giới hạn ở các vị trí đánh dấu số nguyên
- 27. Tại sao bộ hẹn giờ .NET giới hạn ở độ phân giải 15 ms?
- 28. Tại sao chiều dài khóa WPA2-PSK chỉ giới hạn ở 63 ký tự?
- 29. Chức năng trong C với các đối số không giới hạn?
- 30. Các đề xuất số giới hạn hiển thị ở typeahead.js
http://scala-programming-language.1934581.n4.nabble.com/Scala-API-why-like-this-td1952388.html – rwong
http://jnordenberg.blogspot.com/2008/09/hlist -in-scala-revisited-or-scala.html – rwong
Các giới hạn đó vẫn còn 6 năm sau đó: http://stackoverflow.com/a/39981285/6309 – VonC