gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:56:51 25 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# 中是否有任何等效的东西。

我还放置了路线构建器的 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/

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