Câu hỏi này đúng về cú pháp Scala, mặc dù nó chứa một số mã từ akka (như một ví dụ).Tìm hiểu hàm trong scala
Tôi khá mới đối với Scala. Đào vào mã nguồn của AKKA tôi đã đưa ra những điều sau đây phương pháp khá lạ:
def transform[C]
(f: ExecutionContext ⇒ Materializer ⇒ Future[B] ⇒ Future[C]): Unmarshaller[A, C] =
Unmarshaller.withMaterializer { implicit ec ⇒ implicit mat ⇒ a ⇒ f(ec)(mat)(this(a)) }
nơi Unmarshaller.withMaterializer
định nghĩa là
def withMaterializer[A, B](f: ExecutionContext ⇒ Materializer => A ⇒ Future[B]): Unmarshaller[A, B]
gì đang xảy ra ở đây? Chức năng đáng sợ f: ExecutionContext => Materializer => Future[B] => Future[C]
là gì. Và điều có vẻ lạ lùng hơn với tôi là dãy số implicit
s: implicit ec => implicit mat => a => f(ec)(mat)(this(a))
mặc dù withMaterializer
hoàn toàn không có tham số ngầm.
Điều gì ngụ ý có ý nghĩa trong các chuỗi như vậy?
Tôi không nghĩ bạn có thể gọi 'f' không có tham số để sử dụng giá trị ẩn. Nó chỉ hoạt động cho các phương thức. 'implicit' trong hàm chức năng nghĩa là đối số là ẩn bên trong phần thân hàm. –
Bạn nói đúng. 'f' không thể sử dụng như một phương thức với các tham số mặc định. Tôi chỉ cố gắng minh họa cho việc xây dựng đó bằng một ví dụ đơn giản hơn, nhưng lấy nó ra khỏi ngữ cảnh. – laughedelic