Tôi đang triển khai khung FRP trong Scala và dường như tôi đã gặp sự cố. Thúc đẩy bởi một số suy nghĩ, câu hỏi này tôi đã quyết định để hạn chế các giao diện công cộng của khuôn khổ của tôi vì vậy Hành vi chỉ có thể được đánh giá trong 'hiện tại' ví dụ:Thực hiện ảnh chụp nhanh trong FRP
behaviour.at(now)
này cũng rơi vào phù hợp với giả định Conal trong giấy Fran rằng Hành vi chỉ được đánh giá/lấy mẫu vào thời gian tăng. Nó hạn chế sự biến đổi về hành vi nhưng nếu không chúng tôi tìm thấy chính mình trong những vấn đề lớn với hành vi mà đại diện cho một số đầu vào:
val slider = Stepper(0, sliderChangeEvent)
Với hành vi này, việc đánh giá giá trị tương lai sẽ không chính xác và đánh giá giá trị trong quá khứ sẽ đòi hỏi một số lượng không giới hạn của bộ nhớ (tất cả các lần xuất hiện được sử dụng trong sự kiện 'thanh trượt' sẽ phải được lưu trữ).
Tôi gặp sự cố với đặc điểm kỹ thuật cho hoạt động 'chụp nhanh' trên Hành vi do hạn chế này. Vấn đề của tôi được giải thích tốt nhất với một ví dụ (sử dụng thanh trượt đề cập ở trên):
val event = mouseB // an event that occurs when the mouse is pressed
val sampler = slider.snapshot(event)
val stepper = Stepper(0, sampler)
Vấn đề của tôi ở đây là nếu tổ chức sự kiện của mouseB 'đã xảy ra khi mã này được thực thi thì giá trị hiện tại của 'bước' will là 'mẫu' cuối cùng của 'thanh trượt' (giá trị tại thời điểm xảy ra lần cuối). Nếu thời gian xảy ra lần cuối cùng trong quá khứ thì chúng tôi sẽ kết thúc đánh giá 'thanh trượt' bằng cách sử dụng thời gian qua đã phá vỡ quy tắc được đặt ở trên (và giả định ban đầu của bạn). Tôi có thể thấy một vài cách để giải quyết này:
- Chúng tôi 'kỷ lục' quá khứ (giữ chân tất cả các lần xuất hiện trước đây trong một sự kiện) cho phép đánh giá các hành vi với thời gian vừa qua (sử dụng một số lượng không giới hạn của bộ nhớ)
- Chúng tôi sửa đổi 'ảnh chụp nhanh' để tham gia một đối số thời gian ("mẫu sau thời gian này") và thực thi thời gian đó> = now
- Trong một động thái khác, chúng tôi có thể hạn chế việc tạo đối tượng FRP cho thiết lập ban đầu của chương trình bằng cách nào đó và chỉ bắt đầu xử lý sự kiện/đầu vào sau khi thiết lập này hoàn tất
Tôi cũng có thể đơn giản là không thực hiện 'mẫu' hoặc loại bỏ 'stepper'/'switcher' (nhưng tôi không thực sự muốn làm một trong những thứ này). Có ai nghĩ gì về điều này không? Tôi đã hiểu nhầm bất cứ điều gì ở đây?
Bạn biết [Phản ứng] (http://www.reactive-web.co.cc/) phải không? –
Phản ứng là mát mẻ nhưng nó phá vỡ một vài ý tưởng trong FRP. Ví dụ, nó không có khái niệm về các hành vi liên tục: Các tín hiệu trong sự thay đổi phản ứng một cách cụ thể trong thời gian giữa các giá trị khác nhau. Ban đầu tôi đã nhầm lẫn về cách điều này phù hợp với FRP và hỏi câu hỏi này một lúc trước: http://stackoverflow.com/questions/7451317/is-the-signal-representation-of-functional-reactive-programming-correct – seadowg
Ngoài ra, Phản ứng không thực sự có bất kỳ chức năng nào như 'ảnh chụp nhanh' theo như tôi có thể nói. – seadowg