Giả sử tôi có sự kiện kích hoạt mà tôi muốn thực hiện hai việc khi được kích hoạt. Trước tiên, tôi muốn cập nhật giá trị của một số hành vi . Thứ hai, nếu các điều kiện khác được đáp ứng, tôi muốn điều kiện đó kích hoạt một sự kiện khác send_off với giá trị được cập nhật của hành vi. Được thể hiện dưới dạng mã, giả sử tôi cóphản ứng chuối: Sự kiện kích hoạt có chứa giá trị cập nhật nhất của Hành vi
trigger :: Event b
trigger = ...
updateFromTrigger :: b -> (a -> a)
updateFromTrigger = ...
conditionFromTrigger :: b -> Bool
conditionFromTrigger = ...
behavior :: Behavior a
behavior = accumB initial_value (updateFromTrigger <$> trigger)
send_off :: Event a
send_off = ?????? (filterE conditionFromTrigger trigger)
Sau đó, câu hỏi đặt ra là: tôi đặt gì vào ?????? để send_off gửi giá trị cập nhật nhất của hành vi, theo đó tôi có nghĩa là giá trị bao gồm cập nhật từ kích hoạt chỉ được áp dụng cho nó. Thật không may, nếu tôi hiểu chính xác, ngữ nghĩa của Hành vi là như vậy mà giá trị cập nhật không có sẵn ngay lập tức cho tôi, do đó, lựa chọn duy nhất của tôi ở đây về bản chất là trùng lặp công việc và tính toán lại giá trị cập nhật của hành vi để tôi có thể sử dụng nó ngay lập tức trong một sự kiện khác, tức là điền vào ?????? với một cái gì đó giống như
send_off =
flip updateFromTrigger
<$>
behavior
<@>
filterE conditionFromTrigger trigger
Bây giờ, có một cảm giác mà tôi thể làm cho thông tin được cập nhật trong hành vi có sẵn cho tôi ngay lập tức bằng cách sử dụng một rời rạc thay vì một hành vi, nhưng thực sự đây chỉ là tương đương với cho tôi một sự kiện được kích hoạt đồng thời với sự kiện ban đầu của tôi với giá trị cập nhật, và trừ khi tôi đã bỏ lỡ thứ gì đó phản ứng-chuối không cho tôi một cách để kích hoạt một sự kiện chỉ khi hai sự kiện khác đã bắn đồng thời; có nghĩa là, nó cung cấp các đoàn thể của sự kiện chứ không phải giao lộ.
Vì vậy, tôi có hai câu hỏi. Đầu tiên, là sự hiểu biết của tôi về tình trạng này đúng, và đặc biệt là tôi đúng trong kết luận rằng giải pháp của tôi ở trên là cách duy nhất để làm việc xung quanh nó? Thứ hai, hoàn toàn không tò mò, đã có bất kỳ suy nghĩ hoặc kế hoạch nào của các nhà phát triển về cách đối phó với các giao điểm của các sự kiện?
Bất kỳ cảm giác nào khi chúng tôi có thể mong đợi cập nhật? :-) –
@GregoryCrosswhite: Bạn tiếp tục đặt câu hỏi hay. ;-) Tôi đã nghĩ ra một thiết kế đẹp cho những người mới, nhưng việc thực hiện nó sẽ mất một thời gian. –