我閱讀下面的文章F#類型提供者和INPC元編程
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>
所以深入挖掘這個也許有人更加了解可以告訴我,我浪費了我的時間,這種級別的元編程是不可能的。
我不確定我的理解你是如何表現的。類型提供程序可用於在編譯時根據您的代碼生成類型。如何生成一個類型在這裏幫助你? – svick