Есть ли способ использовать операторы let в классах со встроенными методами?

f#

65 просмотра

1 ответ

Упрощенный пример, который дает ошибку, потому что let strявляется частным:

let launch = printfn "%s"

type Test() =
    let str = "Hello"
    member inline t.A() = 
        launch str

Я обнаружил статически разрешенные параметры типа в F #, и после переписывания есть библиотека нейронной сети, в которой 95% функций встроены, в том числе методы класса. Сначала я написал его как скрипт F #, забыв, что существует разница между режимом сценария и режимом компиляции при обработке встроенных методов.

let test = // Is this the only choice?
    let str = "Hello"
    fun () ->
        launch str

Есть ли способ использовать инициализаторы тела в классах F # или я должен переписать классы, чтобы они были функциями более высокого порядка, как указано выше? К счастью, это не будет проблемой здесь.

Этот вопрос связан с этим, но я подумал, что еще раз задам вопрос, поскольку прошло уже 5 лет.

Автор: Marko Grdinic Источник Размещён: 08.11.2019 11:23

Ответы (1)


0 плюса

На самом деле я был неправ. Это правда, что пример функции более высокого порядка работает в упрощенном случае выше, но я понял, что лямбда-аргументы не могут быть разрешены статически. Я подумал об использовании записей немного, а затем попробовал это:

type Test() =
    let str = "Hello"

    member t.Str = str
    member inline t.A() = 
        launch t.Str

Частный член может быть выставлен, и это скомпилируется. Делать это, как указано выше, было бы удовлетворительным.

Автор: Marko Grdinic Размещён: 20.08.2016 02:44
Вопросы из категории :
32x32