【发布时间】:2012-12-09 10:20:22
【问题描述】:
我看了下面的文章
http://studentguru.gr/b/kron/archive/2012/09/26/c-template-metaprogramming-and-f-type-providers.aspx
它展示了一种使用 F# 类型提供程序进行编译时斐波那契序列生成的方法。解决方案在文章中,但最终方案是
> cat .\fib.fs
type fib = Playground.StaticFibonacci<100000>
printfn "Fibonacci(100000) has %d digits" fib.Value.Length
> fsc .\fib.fs -o fib.exe -r:.\FibonacciTypeProvider.dll –nologo
> .\fib.exe
Fibonacci(100000) has 20899 digits
这看起来很强大。我想知道是否可以为 INPC ( INotifyPropertyChanged ) 创建一个类型提供程序,这样您就可以代替
open System.ComponentModel
type MyObject() =
let mutable propval = 0.0
let propertyChanged = Event<_, _>()
interface INotifyPropertyChanged with
[<clievent>]
member x.PropertyChanged = propertyChanged.Publish
member this.MyProperty
with get() = propval
and set(v) =
propval <- v
propertyChanged.Trigger(this, new PropertyChangedEventArgs("MyProperty"))
你可能会写
open System.ComponentModel
type MyObject() =
let mutable propval = 0.0
let propertyChanged = Event<_, _>()
interface INotifyPropertyChanged with
[<clievent>]
member x.PropertyChanged = propertyChanged.Publish
member this.MyProperty : INPCTypeProvider<double>
所以在我浪费半天时间深入研究之前,也许有更知情的人会告诉我我在浪费时间,而且这种级别的元编程是不可能的。
【问题讨论】:
-
我不确定我是否理解您希望它的行为方式。类型提供程序可用于在编译时根据您的代码生成类型。在这里生成一个类型对你有什么帮助?
标签: f# inotifypropertychanged type-providers