2013-08-20 35 views
6

Điều đó thực sự gây phiền nhiễu khi bạn viết một số mã đồng thời cao với phản hồi tương lai hoặc diễn viên và bạn đã nhập thủ công ExecutionContext.Implicits.global. Đã cố gắng tìm một số giải thích tốt lý do tại sao nó không được thực hiện như một tham số mặc định, như nó là done với Strategy trong Scalaz Concurrent. Điều đó sẽ rất hữu ích, không phải để chèn/xóa tất cả các mục nhập đó trong mã. Hoặc tôi thiếu một số logic?Tại sao ExecutionContext toàn cầu không phải là tham số mặc định trong khối trong tương lai?

Trả lời

10

Xu hướng chung dường như yêu cầu người dùng nhập một cách rõ ràng những thứ như implicits, nhà khai thác bổ sung hoặc DSL. Tôi nghĩ rằng đây là một điều tốt vì nó làm cho mọi thứ ít "ma thuật" và dễ hiểu hơn.

Nhưng không có gì ngăn bạn xác định giá trị tiềm ẩn toàn gói cho mã của bạn. Lưu ý rằng nếu ExecutionContext tiềm ẩn luôn được nhập theo mặc định, bạn sẽ không thể thực hiện việc này.

Trong các đối tượng gói:

package object myawsomeconcurrencylibrary { 
    implicit def defaultExecutionContext = scala.concurrent.ExecutionContext.global 
} 

Trong bất kỳ lớp trong cùng một gói:

package myawsomeconcurrencylibrary 

object Bla { 
    future { ... } // implicit from package object is used unless you explicitly provide your own 
}