Bạn nên sử dụng các tham số ngầm khi gần như luôn có cách "đúng" để thực hiện mọi việc và bạn muốn bỏ qua các chi tiết đó hầu như mọi lúc; hoặc khi thường có không cách để thực hiện mọi việc và hàm ý cung cấp chức năng cho những thứ hoạt động.
Để biết ví dụ về trường hợp đầu tiên, trong scala.concurrent.Future
, hầu hết mọi phương thức đều mất một số ExecutionContext
ẩn. Bạn gần như không bao giờ quan tâm những gì ExecutionContext
của bạn là từ cuộc gọi đến cuộc gọi; bạn chỉ muốn nó hoạt động. Nhưng khi bạn cần thay đổi ngữ cảnh thực thi, bạn có thể cung cấp nó như một tham số rõ ràng.
Ví dụ về trường hợp thứ hai, hãy xem CanBuildFrom
s trong thư viện bộ sưu tập. Bạn không thể xây dựng được gì từ bất kì cái gì; một số khả năng nhất định được cung cấp, và thiếu sự ngầm định rằng, cho phép bạn đóng gói một bó của Vector[Option[String]]
s vào một HashSet[Char]
là một cách chính để giữ cho thư viện mạnh mẽ và linh hoạt chưa lành mạnh.
Bạn đang làm không: dường như bạn chỉ sử dụng nó để tiết kiệm một chút đánh máy tại một chỗ với chi phí của điểm khác. Và, trong trường hợp này, khi làm như vậy bạn đã làm cho nó ít rõ ràng hơn cách mọi thứ hoạt động, vì bạn phải nhìn khắp nơi để tìm ra nơi mà yêu cầu tiềm ẩn thực sự được sử dụng. Nếu bạn muốn lưu nhập, bạn nên sử dụng các tên biến ngắn hơn nhưng hãy rõ ràng về điều này:
Action{ req => val name = MyCookie.getName(req).get; Ok("hello "+name) }
Nguồn
2013-03-06 13:12:29
có thể trùng lặp của [Ví dụ về tham số ngầm trong Scala?] (Http://stackoverflow.com/questions/9530893/good-example-of-implicit-parameter-in-scala) –
Cảm ơn Brian. Bạn đúng rồi. – buster84