我正在尝试编译源代码:F#中的自定义WPF控件
这条线怎么样:
let (handler, event) = Event.create<EventArgs>()
Run Code Online (Sandbox Code Playgroud)
引发错误:
The value, constructor, namespace or type 'create' is not defined
在MSDN的Control.Event模块(F#)页面不谈论这样的功能:
此处说明了Event模块提供的附加功能.下面的代码示例说明了Event.create的基本用法,用于创建事件和触发器方法,以lambda表达式的形式添加两个事件处理程序,然后触发事件以执行两个lambda表达式.
Run Code Online (Sandbox Code Playgroud)type MyType() = let myEvent = new Event<_>() member this.AddHandlers() = Event.add (fun string1 -> printfn "%s" string1) myEvent.Publish Event.add (fun string1 -> printfn "Given a value: %s" string1) myEvent.Publish member this.Trigger(message) = myEvent.Trigger(message) let myMyType = MyType() myMyType.AddHandlers() myMyType.Trigger("Event occurred.")
但请注意,它仅在说明中提及,而不是在示例中.
此外,Control.Event模块(F#)页面没有引用此类create功能.
我想这可能是一个旧功能或者什么,但我是F#的新手,所以我看不出它应该被替换为什么..
Event.create对于事件而言,它是一个相当古老的API,从F#2.0开始判断MSDN上的内容.它为您提供了一个触发器功能和一个已发布的事件 - 这两个事件现在都是Publish和类的Trigger成员一起生活的Event.
因此,如果您想以create"现代"术语实现,它可能看起来像这样:
module Event =
let create<'T> () =
let event = Event<'T>()
event.Trigger, event.Publish
Run Code Online (Sandbox Code Playgroud)
我不建议你普遍使用它,但也许这足以使旧的代码恢复生机(这里正确的方法是重构它来使用Publish而Trigger不是create).
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |