Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let globalIterator<'a> = fun (k:string) (v:'a) -> printfn "%s" k
- (*
- ....
- *)
- [<EntryPoint>]
- let main argv =
- // ....
- // get the Map module
- let map = mapType.Assembly.GetTypes() |> Array.find(fun t -> t.Name = "MapModule")
- // get the MapModule.iter function
- let iter = map.GetMethods(BindingFlags.Static ||| BindingFlags.Public) |> Array.find (fun m -> m.Name = "Iterate")
- // non generic function, but I need to set types at runtime
- let staticIterator (k:string) (v:User.User) =
- printfn "%s" k
- let a = System.Reflection.Assembly.GetExecutingAssembly()
- printfn "a = %A" a
- let modu = a.GetType("Program")
- printfn "modu = %A" modu
- let methodInfo = modu.GetMethod("globalIterator")
- // specify type of generic argument
- let closedIterator = methodInfo.MakeGenericMethod(recordType)
- // specialise the generic iter function
- let genericIter = iter.MakeGenericMethod([| typeof<string> ; recordType |])
- // next line works
- genericIter.Invoke(null, [| staticIterator ; ttt4 |]) |> ignore
- // I need this to work
- // Doesn't work because it is a MethodInfo I pass.
- genericIter.Invoke(null, [| closedIterator ; ttt4 |]) |> ignore
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement