在F#的上下文中理解这个关键字的C#
我正在和F#试南希。它很酷,但我在F#中找不到一些东西。首先,我将写下这两个代码 这是C语言的代码# 这是F的代码# 如果需要更多详细信息,请告诉我。一些评论: 由于必须在F#中使用在F#的上下文中理解这个关键字的C#,c#,c#-4.0,f#,nancy,c#-to-f#,C#,C# 4.0,F#,Nancy,C# To F#,我正在和F#试南希。它很酷,但我在F#中找不到一些东西。首先,我将写下这两个代码 这是C语言的代码# 这是F的代码# 如果需要更多详细信息,请告诉我。一些评论: 由于必须在F#中使用Get.[/“],问题在于编译器需要区分访问器和以列表为参数的函数([“/”]=“/”::[]) 对于base问题,我认为您应该使用base而不使用额外的引号。您可能需要将作为self添加到构造函数中才能使用它,但添加双引号会将其添加到变量名中,这并不是您想要的。为了给出具体的代码片段,下面的示例使用作为当前实例的名
Get.[/“]
,问题在于编译器需要区分访问器和以列表为参数的函数([“/”]=“/”::[]
)
对于
base
问题,我认为您应该使用base
而不使用额外的引号。您可能需要将作为self
添加到构造函数中才能使用它,但添加双引号会将其添加到变量名中,这并不是您想要的。为了给出具体的代码片段,下面的示例使用作为当前实例的名称,以便您可以在构造函数中引用它(您可以为引用此
的变量使用任何名称),该变量直接对应于C版本:
键入HomeModule(),如下所示=
继承NancyModule()
执行此操作。获取。[”/“]this.View。[“Index.html”]:>obj
你能给我提供一些代码示例吗?是的,即使是base也转换成了variable,但它工作得很好。谢谢@toman。你能告诉我为什么我必须选择Get.[]而不是直接Get.[]吗。谢谢你的这个技巧。我更简化了代码…@kunjee the F#syntax等等。[idx]
编译成与C完全相同的IL#语法blah[idx]
@JackP。我只是想了解这背后的基本原理。否则我不介意把它放进去。当我仅仅因为使用F而杀死行时:)
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";
}
}
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
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);
}
type HomeModule() as this =
inherit NancyModule()
do this.Get.["/"] <- fun parameters -> this.View.["Index.html"] :> obj