Tôi muốn chuyển đổi hoàn toàn giữa đối tượng Scala XML Elem và một biểu diễn khác của một phần tử XML, trong phần tử dom4j Element của tôi. Tôi đã viết các chuyển đổi tiềm ẩn sau đây:Chuyển đổi ngầm định giữa các loại bộ sưu tập Scala
implicit def elemToElement(e: Elem): Element = ... do conversion here ...
implicit def elementToElem(e: Element): Elem = ... do conversion here ...
Cho đến nay rất tốt, công trình này.
Bây giờ tôi cũng cần bộ sưu tập các yếu tố đã nói để chuyển đổi cả hai cách. Trước tiên, tôi có cần viết các phương thức chuyển đổi bổ sung không? Mọi thứ dường như không hoạt động nếu tôi không làm.
Tôi cố gắng để viết như sau:
implicit def elemTToElementT(t: Traversable[Elem]) = t map (elemToElement(_))
implicit def elementTToElemT(t: Traversable[Element]) = t map (elementToElem(_))
này trông không quá lý tưởng vì nếu phương pháp chuyển đổi mất một traversable, sau đó nó cũng trả về một traversable. Nếu tôi vượt qua một danh sách, tôi cũng có được một Traversable ra. Vì vậy, tôi giả định việc chuyển đổi nên được parametrized bằng cách nào đó.
Vì vậy, cách tiêu chuẩn để viết những chuyển đổi này là gì để có thể nhận được thông tin chung nhất có thể?
Tại sao lại khó hiểu hơn khi có thể chuyển đổi tự động từ 'X' sang' Y' hơn từ 'Danh sách [X]' sang 'Danh sách [Y]'? Nó lấp đầy chính xác nhu cầu tương tự, cụ thể là bạn không thực sự quan tâm đến việc biểu diễn nào được sử dụng và bạn muốn trình biên dịch xử lý sự bận rộn cho bạn. –
Phần lớn là vấn đề về phong cách và phương pháp hay nhất. Yêu cầu làm việc mà nhiều phép thuật đang yêu cầu rắc rối. Họ, theo quan điểm của tôi, một trong những BFGs của scala: hãy cẩn thận những gì bạn chỉ nó tại. – sblundy
Tôi đồng ý với Rex: Tôi không đồng ý rằng điều đó gây nhầm lẫn. Ngược lại, tôi thậm chí đã hy vọng rằng việc xác định một chuyển đổi tiềm ẩn của một loại đã cho sẽ tự động chuyển đổi ngầm (tôi sẽ nói "monadic") cho loại đó hoạt động tốt. – ebruchez