Я пытаюсь Нэнси с F #. Это довольно круто, но я не мог получить несколько вещей в F #. Сначала я напишу оба кода.Понимание C# в контексте 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
Несколько вещей, которые я уже получить, я помещаю здесь только в случае, если кто-то прочитал этот вопрос в качестве ссылки, то s/он получит его.
Параметр используется как конструктор усилий. Он должен определять после того, как личный или пусть член типа и перед любым членом типа. В соответствии с MSDN. base
является эквивалентом базы в C#. Можно использовать базу также, но когда я форматировал ее, изменилось.
Итак, почему base
предпочтительнее вместо базы. Когда я попытался вызвать base.View. ["Index.html"] в вызове функции, он заставил меня добавить частного участника, почему? Как и в C#, это просто разрешено. Теперь вот что я не получу.
В C# я могу напрямую написать Get ["/"], но в F # мне нужно написать Get. ["/"]. Значит, мне нужно вызвать другую функцию вместо конструктора свойств.
Даже я не знаю, как «это» использовать в конструкторе, внутренне работающем на 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);
}
Пожалуйста, дайте мне знать, если какие-либо дополнительные детали требуется.
Спасибо @toman. Можете ли вы рассказать мне, почему я должен пойти на Get. [] Вместо прямого Get []. И спасибо за этот трюк. Я сократил код еще больше ... – kunjee
@kunjee Синтаксис F # 'blah. [Idx]' компилируется в тот же IL, что и синтаксис C# 'blah [idx]'. –
@JackP. Просто просил понять фундаментальное значение этого. Иначе я не против сдачи. когда я убиваю строки только из-за использования F # :) – kunjee