Tôi đang xem xét việc chuyển một thư viện mẫu văn bản rất đơn giản sang scala, chủ yếu là tập thể dục trong việc học ngôn ngữ. Thư viện hiện đang triển khai tại cả hai Python và Javascript, và hoạt động cơ bản của nó nhiều hay ít nắm này (trong python):Tôi nên chỉ định loại dữ liệu không có cấu trúc giống như JSON trong Scala như thế nào?
template = CompiledTemplate('Text {spam} blah {eggs[1]}')
data = { 'spam': 1, 'eggs': [ 'first', 'second', { 'key': 'value' }, true ] }
output = template.render(data)
Không ai trong số này là cực kỳ khó khăn để làm trong Scala, nhưng điều tôi m không rõ ràng là cách thể hiện tốt nhất loại tĩnh của thông số data
. Về cơ bản, tham số này sẽ có thể chứa các thứ bạn tìm thấy trong JSON: một số nguyên thủy (chuỗi, int, booleans, null) hoặc danh sách 0 hoặc nhiều mục hoặc bản đồ bằng 0 hoặc nhiều hơn mặt hàng. (Vì mục đích của câu hỏi này, các bản đồ có thể bị ràng buộc để có các khóa chuỗi, có vẻ như cách Scala thích mọi thứ.)
Ý tưởng ban đầu của tôi chỉ là sử dụng một đối tượng cấp cao nhất, nhưng đó là dường như không hoàn toàn chính xác với tôi. Trong thực tế, tôi không muốn thêm các đối tượng tùy ý của bất kỳ loại lớp nào trong đó; Tôi chỉ muốn các yếu tố tôi đã nêu ở trên. Đồng thời, tôi nghĩ rằng trong Java gần nhất tôi thực sự có thể có được sẽ là Map<String, ?>
, và tôi biết một trong những tác giả Scala thiết kế Generics của Java.
Một điều tôi đặc biệt tò mò là cách các ngôn ngữ chức năng khác với các hệ thống kiểu tương tự xử lý loại vấn đề này. Tôi có cảm giác rằng những gì tôi thực sự muốn làm ở đây là đưa ra một tập hợp các lớp vỏ mà tôi có thể phù hợp với mô hình, nhưng tôi không thể hình dung được nó trông như thế nào.
Tôi có Lập trình trong Scala, nhưng thành thật mà nói, đôi mắt của tôi bắt đầu lấp lánh một chút tại công cụ hiệp phương sai/contravariance và tôi hy vọng ai đó có thể giải thích điều này một chút rõ ràng và ngắn gọn hơn.
Cảm ơn, đó chỉ là những gì tôi đang tìm kiếm. Nguồn của trình phân tích cú pháp JSON được viết lại mà bạn đã liên kết với trên pastebin là gì? (Tôi nhận thấy rằng trình phân tích cú pháp tích hợp trong libs của Scala chỉ sử dụng Map [String, Any].) –
Tôi đã viết trình phân tích cú pháp liên kết với trên pastebin. Tôi đã có ý định thực hiện một dự án chính thức từ nó, nhưng không tìm thấy thời gian. –