Giả sử tôi tạo một Mailbox
bằng cách sử dụng mailbox = Signal.mailbox Action
, trong đó type Action = Blah
, sau đó tôi có thể gửi các hành động này mailbox
bằng cách sử dụng Signal.send mailbox.address Blah
, điều này cho phép tôi nghe theo số mailbox.signal
, như thế nào? Ý tôi là, sau tất cả, gõ Mailbox
chỉ là một bí danh của {address : Signal.Address Action, signal : Signal.Signal Action}
, là bởi vì, trong elm, chỉ có một tín hiệu cho một kiểu nhất định, vì vậy trong kịch bản trên, tôi không phải nói với elm để ràng buộc mailbox.signal
với mailbox.address
, elm sẽ tự tìm ra vì sự tương ứng một-một giữa địa chỉ và tín hiệu của một loại nhất định?Elm: Mailbox hoạt động như thế nào?
Trả lời
Khả năng hộp thư đặt sự kiện bạn gửi cho nó vào tín hiệu của nó hoàn toàn dựa trên "ma thuật", nghĩa là nó được thực thi nguyên bản (bằng JavaScript) chứ không phải thứ bạn có thể tự thực hiện. Đó là lý do tại sao nó được tích hợp sẵn trong các thư viện chuẩn.
Tạo hộp thư là hành động bắt buộc, có hiệu lực (shhh, đừng nói cho ai biết). Vì vậy, nếu bạn sử dụng:
mailbox1 = Signal.mailbox Blah
mailbox2 = Signal.mailbox Blah
hai hộp thư đó sẽ khác biệt. Gửi tin nhắn đến mailbox2.address
sẽ dẫn đến thông báo trên mailbox2.signal
nhưng không phải là mailbox1.signal
. Điều này phá vỡ tính minh bạch tham chiếu, điều đó là xấu, nhưng bây giờ nó không phá vỡ mọi thứ. (Điều này có thể đi quá xa vào một ốp, nhưng bởi vì bạn cần Signal
cho đầu ra và không thể có Signal (Signal something)
, trong thực tế hiệu quả không được quản lý của việc tạo hộp thư không phải là điều rối tung lên). Điều này "rò rỉ" sẽ được cố định tại một số điểm trong tương lai. Đã có một đề xuất nhưng những thay đổi lớn được tổ chức theo các phiên bản khác nhau của ngôn ngữ.
- 1. Elm so sánh với ClojureScript như thế nào?
- 2. __iter__ hoạt động như thế nào?
- 3. [UIAlertView show] hoạt động như thế nào?
- 4. Traceroute hoạt động như thế nào?
- 5. ArrayAccess hoạt động như thế nào?
- 6. jQuerys $ .each() hoạt động như thế nào?
- 7. DisplacementMapFilter hoạt động như thế nào?
- 8. MenuItem.SHOW_AS_ACTION_IF_ROOM hoạt động như thế nào?
- 9. Haskell: TVar hoạt động như thế nào?
- 10. GetContentResolver() hoạt động như thế nào?
- 11. P6SPY hoạt động như thế nào?
- 12. Trò chuyện hoạt động như thế nào?
- 13. objc_setAssociatedObject hoạt động như thế nào?
- 14. Scanr hoạt động như thế nào? Haskell
- 15. Codename One hoạt động như thế nào?
- 16. PropertyChangedEventHandler hoạt động như thế nào?
- 17. ResolveProjectReferences hoạt động như thế nào?
- 18. CellForRowAtIndexPath hoạt động như thế nào?
- 19. `ggplotGrob` hoạt động như thế nào?
- 20. Host_var ansible hoạt động như thế nào?
- 21. Thread.currentThread() hoạt động như thế nào?
- 22. Perf hoạt động như thế nào?
- 23. PHP max_execution_time hoạt động như thế nào?
- 24. 'typeof' hoạt động như thế nào?
- 25. C# Events hoạt động như thế nào?
- 26. Nén MPEG4 hoạt động như thế nào?
- 27. gdb hoạt động như thế nào?
- 28. aspx.designer.cs nó hoạt động như thế nào?
- 29. Dropbox hoạt động như thế nào?
- 30. IDataErrorInfo hoạt động như thế nào?
Nếu gọi 'Signal.mailbox' hai lần tạo hai hộp thư khác nhau, làm thế nào để mã trong hướng dẫn [Giao tiếp với hộp thư] (http://elm-lang.org/guide/reactivity), tức là' Signal.send contentMailbox. địa chỉ "hello!" 'làm việc? Vì 'contentMailbox' được gọi là lần thứ hai ở đó, nên tạo một tín hiệu khác không phải là tín hiệu được sử dụng trong' main = Signal.map show contentMailbox.signal' nơi nó được gọi là lần đầu tiên và do đó _ "hello" _ nên không xuất hiện? – RAbraham