GitHub - fsprojects/FSharp.Interop.Dynamic: DLR interop for F# -- works like dyn...
source link: https://github.com/fsprojects/FSharp.Interop.Dynamic
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
FSharp.Interop.Dynamic
The F# Dynamic Operator, powered by the DLR. Compiled for .NET Standard 2.0, .NET Standard 1.6, .NET Framework 4.5
Install from NuGet
PM> Install-Package FSharp.Interop.Dynamic
Build Status
Platform Status Nuget Deployment
Mac/Linux/Windows
Coverage
Bleeding edge feed on MyGet
Usage
target?Property
, target?Property<-value
, and target?Method(arg,arg2)
allow you to dynamically get/set properties and call methods
Also Dyn.implicitConvert
,Dyn.explicitConvert
, comparison operators and more.
Examples:
System.Dynamic
open FSharp.Interop.Dynamic let ex1 = ExpandoObject() ex1?Test<-"Hi"//Set Dynamic Property ex1?Test //Get Dynamic
MVC ViewBag
x.ViewBag?Name<-"George"
Dynamitey
open FSharp.Interop.Dynamic open Dynamitey.DynamicObjects let ComBinder = LateType("System.Dynamic.ComBinder, System.Dynamic, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") let getPropertyNames (target:obj) = seq { yield! target.GetType().GetTypeInfo().GetProperties().Select(fun it -> it.Name) if (ComBinder.IsAvailable) then yield! ComBinder?GetDynamicDataMemberNames(target) }
Python Interop
open Python.Runtime open FSharp.Interop.Dynamic open FSharp.Interop.Dynamic.Operators do use __ = Py.GIL() let math = Py.Import(“math”) math?cos(math?pi ?*? 2) |> printfn “%O” let sin = math?sin sin 5 |> printfn “%O” math?cos(5) ?+? sin(5) |> printfn “%O”
SignalR (.net framework version)
open FSharp.Interop.Dynamic type MyHub = inherit Hub member x.Send (name : string) (message : string) = base.Clients.All?addMessage(name,message) |> ignore
Caveats:
The DLR
is incompatible with interface explicit members, so are these operators, just like C#'s dynamic
keyword.
.NET Core 2.0.0 to 2.0.2 had a major bug in the C# dynamic keyword with nested classes inside of generic classes.. You will know it from a substring argument length exception. .NET Framework 4.0+, .NET Core 1.x and .NET Core 2.0.3+ and later are unaffected.
Maintainer(s)
The default maintainer account for projects under "fsprojects" is @fsprojectsgit - F# Community Project Incubation Space (repo management)
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK