gpt4 book ai didi

c# - 在此关键字的 F# 上下文中理解 C#

转载 作者:行者123 更新时间:2023-12-02 04:58:05 26 4
gpt4 key购买 nike

我正在用 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 更可取。当我试图在函数调用中调用 base.View.["Index.html"] 时,它强制我添加私有(private)成员,为什么?就像在 C# 中一样,它只是允许的。现在这是我不明白的事情。

在 C# 中我可以直接写 Get["/"] 但在 F# 中我需要写 Get.["/"]。意味着我必须调用另一个函数而不是属性构造函数。

即使我不知道“this”在构造函数中的使用在 C# 中是如何内部工作的,所以如果有人对此进行解释,那就太好了……如果 F# 中有任何等效项。

我也放了route builder的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);
}

如果需要任何进一步的详细信息,请告诉我。

最佳答案

给出一个具体的代码片段,下面的例子使用as this来命名当前实例,这样你就可以在构造函数中引用它(你可以为引用的变量使用任何名称this)直接对应C#版本:

type HomeModule() as this = 
inherit NancyModule()
do this.Get.["/"] <- fun parameters -> this.View.["Index.html"] :> obj

关于c# - 在此关键字的 F# 上下文中理解 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17606405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com