C# 从C调用F#`printfn`#
如何从C代码直接调用F#C# 从C调用F#`printfn`#,c#,.net,f#,string-formatting,C#,.net,F#,String Formatting,如何从C代码直接调用F#printfn?我看到有一个 T PrintfModule.PrintFormat<T>(PrintfFormat<T, TextWriter, Unit,Unit> format) 在另一个C#程序集中,如何通过调用与printfn“%A”x相当的代码来打印x,使用PrintfModule.PrintFormatLine?我已经创建了F#file Program.fs: open System type R = { r: R } let re
printfn
?我看到有一个
T PrintfModule.PrintFormat<T>(PrintfFormat<T, TextWriter, Unit,Unit> format)
在另一个C#程序集中,如何通过调用与printfn“%A”x
相当的代码来打印x
,使用PrintfModule.PrintFormatLine
?我已经创建了F#file Program.fs:
open System
type R = { r: R }
let rec x = { r = x }
[<EntryPoint>]
let main argv =
printfn "%A" x
0
开放系统
类型R={R:R}
设rec x={r=x}
[]
让主argv=
printfn“%A”x
0
编译后反编译为C#:
使用Microsoft.FSharp.Core;
...
公共静态程序.rx{
获取{return\u0024Program.x\u00406;}
}
[入口点]
公共静态int main(字符串[]argv)
{
\u0024Program.init\u0040=0;
int init=\u0024Program.init\u0040;
超顶级操作符
.PrintFormatLine(
(打印格式)
新的printformat(“%A”)).Invoke(Program.x);
返回0;
}
公共密封R类:IEquatable、IStructuralEquatable、IComparable、IComparable、IStructuralComparable
{
内部程序。R\u0040;
公共程序.R{get{返回此.R\u0040;}
公共R(Program.rr){this.R\u0040=R;}
}
希望它能给你一个提示。我已经创建了F#file Program.fs:
open System
type R = { r: R }
let rec x = { r = x }
[<EntryPoint>]
let main argv =
printfn "%A" x
0
开放系统
类型R={R:R}
设rec x={r=x}
[]
让主argv=
printfn“%A”x
0
编译后反编译为C#:
使用Microsoft.FSharp.Core;
...
公共静态程序.rx{
获取{return\u0024Program.x\u00406;}
}
[入口点]
公共静态int main(字符串[]argv)
{
\u0024Program.init\u0040=0;
int init=\u0024Program.init\u0040;
超顶级操作符
.PrintFormatLine(
(打印格式)
新的printformat(“%A”)).Invoke(Program.x);
返回0;
}
公共密封R类:IEquatable、IStructuralEquatable、IComparable、IComparable、IStructuralComparable
{
内部程序。R\u0040;
公共程序.R{get{返回此.R\u0040;}
公共R(Program.rr){this.R\u0040=R;}
}
希望它能给你一个如何做的提示。AlexAtNet的简短版本是:
PrintfModule
.PrintFormatLine(
新打印格式(“%A”))
.Invoke(Program.x);
虽然我不明白为什么需要铸造
(printformat)
。如果有人知道原因,请告诉我。AlexAtNet的简短版本是:
PrintfModule
.PrintFormatLine(
新打印格式(“%A”))
.Invoke(Program.x);
虽然我不明白为什么需要铸造(printformat)
。如果有人知道原因,请告诉我
using Microsoft.FSharp.Core;
...
public static Program.R x {
get { return \u0024Program.x\u00406; }
}
[EntryPoint]
public static int main(string[] argv)
{
\u0024Program.init\u0040 = 0;
int init = \u0024Program.init\u0040;
ExtraTopLevelOperators
.PrintFormatLine<FSharpFunc<Program.R, Unit>>(
(PrintfFormat<FSharpFunc<Program.R, Unit>, TextWriter, Unit, Unit>)
new PrintfFormat<FSharpFunc<Program.R, Unit>, TextWriter, Unit, Unit, Program.R>("%A")).Invoke(Program.x);
return 0;
}
public sealed class R : IEquatable<Program.R>, IStructuralEquatable, IComparable<Program.R>, IComparable, IStructuralComparable
{
internal Program.R r\u0040;
public Program.R r { get { return this.r\u0040; } }
public R(Program.R r) { this.r\u0040 = r; }
}
PrintfModule
.PrintFormatLine(
new PrintfFormat<FSharpFunc<Program.R, Unit>, TextWriter, Unit, Unit, Program.R>("%A"))
.Invoke(Program.x);