Реализация интерфейса в f # - PullRequest
4 голосов
/ 15 марта 2011

Вот мой интерфейс c #:

public interface ITemplateService
{
    string RenderTemplate(object model, string templateName);
    string RenderTemplate(object model, string templateName, string directory);
}

Я пытаюсь сделать реализацию в F #, но получил ошибку по ключевому слову end. (неожиданно end в файле реализации)

module TemplateService

open DotLiquid

type TemplateService = 
    inherit ITemplateService

        member this.RenderTemplate model (templateName:string):string = ""
        member this.RenderTemplate model (templateName:string, directory:string):string = ""
end//error here.

пс. Что это за код в F #:

Template template = Template.Parse(stringToTemplate);
template.Render(Hash.FromAnonymousObject(model));

Ответы [ 2 ]

4 голосов
/ 15 марта 2011

Поскольку вы реализуете интерфейс, вы захотите использовать этот синтаксис.

type TemplateService() = 
    interface ITemplateService with
        member this.RenderTemplate model (templateName:string):string = ""
        member this.RenderTemplate model (templateName:string, directory:string):string = ""
3 голосов
/ 15 марта 2011

В дополнение к ответу ChaosPandion:

Класс может быть определен так:

type ClassName(constructorArguments) =
  class
    ...
  end

или так:

type ClassName(constructorArguments) =
  ...

Так что вам нужноключевое слово class и end или ни одно из них.Обычно люди используют форму без class и end.

Ваш другой фрагмент кода будет выглядеть примерно так:

let template = Template.Parse stringToTemplate
template.Render (Hash.FromAnonymousObject model)
...