2012-02-22 43 views
6

Có hai cách khác nhau để thực hiện nó.Cách tốt nhất để sử dụng thư viện phong phú của tôi trong scala là gì?

Một là ngắn hơn

implicit def toR1(s:String) = new { def getLength = s.length)} 

Thứ hai là nhiều lâu

class R2(s:String){def getLength2 = s.length)} 
implicit def toR2(s:String) = new R2(s) 

Cái nào tốt hơn?

+4

lớp 'ngầm R3 (s: String) {def getLength = s.length}' :) Tôi thực sự hy vọng rằng nó sẽ được đưa vào Scala 2.10: http://docs.scala-lang.org/sips/pending/implicit-classes.html – tenshi

+2

một bản sao có thể có: [Làm cách nào để triển khai các loại trung gian cho các phương thức ngầm?] (Http://stackoverflow.com/questions/5220359/cách thực hiện-trung gian-loại-cho-ngầm-phương pháp/5220725). TL; DR thứ hai là hiệu suất tốt hơn-khôn ngoan như cách đầu tiên sử dụng phản ánh dưới mui xe –

+0

lớp ngầm _are_ bao gồm trong Scala 2,10, vì vậy có lẽ câu trả lời hiện tại chỉ cho câu hỏi này là lỗi thời. – matanster

Trả lời

11

Phiên bản đầu tiên sử dụng structural type. Nó làm cho nó có thể viết mã ngắn và dễ đọc, nhưng một bất lợi của các kiểu cấu trúc là sự phản chiếu được sử dụng trong thời gian chạy khi bạn gọi phương thức trong kiểu cấu trúc. Gọi phương thức qua phản xạ chậm hơn gọi trực tiếp phương thức.

Chi tiết có trong bài viết trên blog này (bằng văn bản của tôi): Avoid structural types when pimping libraries

+0

@Andy cảm ơn, đã thay thế liên kết. – Jesper

Các vấn đề liên quan