多行具有命名参数的F#中的调用方法

时间:2018-10-30 16:44:56

标签: f# c#-to-f#

我有一些F#代码,该代码调用用C#编写的带有很多参数的方法。

为了使事情更清晰易懂,我在调用方法时使用了命名参数

let request = Models.UserService.CreateUserRequest(
    email = "email@example.com",
    password = "password",
    title = "title",
    firstname = "firstname",
    lastname = "lastname",
    nickname = "nickname",
    locale = "locale",
    birthDate = "birthdate",
    currency = "USD",
    ipAddress = "127.0.0.1",
    address = address,
    mobilePhone = "+1 123 456 7890"
)

但是我收到有关缩进的警告:

warning FS0058: Possible incorrect indentation: this token is offside of context started at position (30:19). Try indenting this token further or using standard formatting conventions.

很明显,如果我不使用命名参数或将所有内容放在一行中,警告就会消失。但是我想用一种清晰的方式格式化它。

是否可以在没有警告的情况下格式化F#中多行的方法调用?

1 个答案:

答案 0 :(得分:4)

F# language spec中包含轻量语法的正式描述,而您追求的特定功能称为“越境上下文”。这将使您减少缩进到最后一个上下文的列以及一个或多个其他列。在=上下文中进行Let分配之后,以及在Paren上下文中进行开放括号之后,将立即遇到越位上下文。

实际上,您可以像这样缩进:

let request =
    Models.UserService.CreateUserRequest(
        email = "email@example.com",
        password = "password",
        ... )