Có vẻ như có một số phép dịch thuật giữa các cấu trúc dữ liệu Java khi truy cập chúng từ JRuby; chúng dường như hoạt động giống như các bản đồ và mảng ruby đơn giản. Tuy nhiên, cấu trúc dữ liệu Scala thì không. Tôi thấy rất ít khi googling xung quanh cho JRuby/Scala interop. Ví dụ, bạn sẽ lặp lại các loại Map
và List
của Scala như thế nào?Truy cập cấu trúc dữ liệu Scala trong JRuby
Trả lời
Chắc chắn bạn có thể. Nhưng đó là một chút nhảy. Đối với danh sách:
require "/usr/share/scala/lib/scala-library.jar" # load the scala lib
Java::scala.collection.immutable::List.empty.send("::", 1)
.map(lambda{|e|e+1},
Java::scala.collection.immutable.List.canBuildFrom) # by lopex
Bây giờ bạn có danh sách scala trong jruby. Bạn có thể viết một số API Ruby điền đầy đủ vào những điều bạn cần.
Nếu bằng cách "lặp lại", bạn có nghĩa là sử dụng HOF (các hàm bậc cao hơn) chẳng hạn như map
, reduce
, filter
, collect
và cứ như vậy bạn sẽ gặp sự cố. Nó có thể, nhưng sự sang trọng cú pháp bạn nhận được trong Scala đến bởi vì nó rất dễ dàng để viết literal chức năng. Có gì trình biên dịch được thực hiện cho bạn khi bạn viết một cái gì đó như thế này:
scala> val l1 = List(1, 2, 3)
l1: List[Int] = List(1, 2, 3)
scala> l1.map(i => i * i)
res0: List[Int] = List(1, 4, 9)
... là tạo và khởi tạo một lớp con của Function1[Int, Int]
mà apply
phương pháp lấy đơn Int
luận một đánh giá cơ quan chức năng theo nghĩa đen ((i => i * i)
).
Để bạn sử dụng bất kỳ phương thức Scala nào chấp nhận một hàm bạn sẽ phải thực hiện tương tự. Một cái gì đó như:
scala> class ISquaredF extends Function1[Int, Int] { def apply(i: Int) = i * i }
defined class ISquaredF
scala> (new ISquaredF)(5)
res1: Int = 25
scala> val isf1 = new ISquaredF
isf1: ISquaredF = <function1>
scala> l1.map(isf1)
res2: List[Int] = List(1, 4, 9)
Nhìn chung, việc sử dụng mã Scala từ bất kỳ ngôn ngữ JVM nào cũng dễ dàng hơn rất nhiều. Đó là lý do tại sao các hệ thống như Akka muốn hỗ trợ cả khách hàng Scala và Java đều có các API Java đặc biệt để tránh những phần này của ngôn ngữ Scala.
Cảm ơn lời giải thích tuyệt vời. – devth
- 1. Truy vấn dữ liệu cấu trúc cây trong SQL Server
- 2. Truy cập bitfields trong khi đọc/ghi cấu trúc dữ liệu nhị phân
- 3. Cấu trúc và cấu trúc dữ liệu khác nhau
- 4. DAO & BO (lớp truy cập dữ liệu) - kiến trúc
- 5. Tạo cấu trúc dữ liệu như cấu trúc dữ liệu trong Java
- 6. Cấu trúc dữ liệu C#
- 7. Java câu hỏi cấu trúc dữ liệu
- 8. Cách truy cập cấu trúc dữ liệu từ quy trình Python hiện đang chạy trên Linux?
- 9. Cách cấu trúc cơ sở dữ liệu để truy cập nút nhanh
- 10. Cấu trúc dữ liệu trong Python
- 11. Loại dữ liệu cấu trúc trong Mathematica?
- 12. Làm cách nào để ước tính kích thước của cấu trúc dữ liệu trong scala?
- 13. C++ Mảng cấu trúc truy cập
- 14. Cập nhật cấu trúc DataSet trong Visual Studio để khớp cấu trúc cơ sở dữ liệu SQL mới
- 15. Cấu trúc cơ sở dữ liệu SQL
- 16. Cấu trúc dữ liệu cây Postgresql
- 17. cách đọc cấu trúc dữ liệu bất biến từ tệp trong scala
- 18. Cấu trúc dữ liệu Java Tham chiếu
- 19. Thư viện cấu trúc dữ liệu C
- 20. Cấu trúc dữ liệu Trie - Java
- 21. Cọ vẽ cấu trúc dữ liệu (Java)
- 22. Mẫu cấu trúc dữ liệu RESTful
- 23. C: Cấu trúc dữ liệu căn chỉnh
- 24. Thuật toán và cấu trúc dữ liệu
- 25. Cấu trúc dữ liệu tra cứu IPv6
- 26. java.util.Stack cấu trúc dữ liệu thích hợp?
- 27. Tái cấu trúc lớp dữ liệu
- 28. Cấu trúc dữ liệu phức tạp Redis
- 29. Cấu trúc dữ liệu cho các cấp trong Trò chơi
- 30. Python có cấu trúc dữ liệu dây không?
Cảm ơn bạn đã cập nhật. Đang thử điều này. – devth