5

GitHub - fsprojects/FSharp.Interop.Dynamic: DLR interop for F# -- works like dyn...

 2 years ago
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)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK