2011-12-06 25 views
5

Có điều gì tương đương với hàm SomeClass.metaClass.getProperty đáng chú ý của Groovy trong scala không? Điều này sẽ rất hữu ích trong việc tạo các ngôn ngữ cụ thể cho miền. Ví dụ: tôi có thể nói: val x = SomeClass(); x.arbitraryPropertyName thay vì x.get("arbitraryPropertyName") hoặc x("arbitraryPropertyName").ClassX.metaClass.getProperty của Groovy ở scala

Trả lời

9

Từ mô tả của bạn, tính năng này có vẻ giống như của Scala Dynamic. Từ số Scaladoc,

Đặc điểm điểm đánh dấu cho phép lời gọi động. Các trường hợp x của đặc tính này cho phép các cuộc gọi x.meth (args) cho các tên phương thức tùy ý meth và các danh sách đối số args. Nếu cuộc gọi không được hỗ trợ bởi x, thì đó là được viết lại thành x.applyDynamic ("meth", args).

Nghĩa là, nếu lớp học của bạn kéo dài Dynamic, sau đó gọi của mẫu x.arbitraryPropertyName được dịch sang x.applyDynamic("arbitraryPropertyName"), và tất nhiên bạn có thể xác định hành vi của applyDynamic.