我正在用 F# 尝试 Nancy。这很酷,但我无法在 F# 中得到它。首先,我将写下这两个代码。
这是C#的代码
public class HomeModule : NancyModule
{
public HomeModule()
{
this.Get["/"] = (parameters) => View["Index.html"];
}
}
public class AboutModule : NancyModule
{
public AboutModule():base("/about")
{
this.Get["/"] = (parameters) => "Hello About";
}
}
这是F#的代码
type HomeModule() =
inherit NancyModule()
let get = ``base``.Get
let view = ``base``.View
do get.["/"] <- fun parameters -> view.["Index.html"] :> obj
type AboutModule() =
inherit NancyModule("/about")
let get = ``base``.Get
do get.["/"] <- fun parameters -> "Hello About" :> obj
我已经得到的东西很少,我放在这里以防万一有人读到这个问题作为参考,然后他/她会得到它。
Do 参数用作强制构造函数。它应该在所有 private 或 let 类型成员之后和任何类型成员之前定义。根据 MSDN。
base
相当于 C# 中的 base 。也可以使用 base ,但是当我格式化它时它改变了..
那么,为什么base
更可取而不是基础。当我尝试在函数调用中调用 base.View.["Index.html"] 时,它强制我添加私有成员,为什么?就像在 C# 中一样,它只是允许的。现在这是我没有得到的东西。
在 C# 中我可以直接编写 Get["/"],但在 F# 中我需要编写 Get.["/"]。意味着我必须调用另一个函数而不是属性构造函数。
即使我不知道在 C# 内部构造函数中的“this”使用是如何工作的,所以如果有人解释这一点,它会很棒......如果在 F# 中有任何等价物。
我也将路由构建器的 nancy 代码供参考
public class RouteBuilder : IHideObjectMembers
{
public RouteBuilder(string method, NancyModule parentModule);
public Func<dynamic, dynamic> this[string path] { set; }
public Func<dynamic, dynamic> this[string path, Func<NancyContext, bool> condition] { set; }
protected void AddRoute(string path, Func<NancyContext, bool> condition, Func<dynamic, dynamic> value);
}
如果需要任何进一步的细节,请告诉我。