let eval a b =
let r = a + b
printf "calculate.."
r
type Foo() =
member this.Eval = eval 5 10
[<EntryPoint>]
let main argv =
let f = Foo()
let a = f.Eval
let b = f.Eval
0
Это вызов eval 2 раза вместо одного времени. Кажется, this.Eval является указателем на функцию, который вызывает eval каждый раз, когда я вызываю .Eval.Переменные участника в F #
Я действительно хочу иметь переменную.
Я решил его, делая это ...
let eval a b =
let r = a + b
printf "calculate.."
r
type Foo() =
let e = eval 5 10
member this.Eval = e
[<EntryPoint>]
let main argv =
let f = Foo()
let a = f.Eval
let b = f.Eval
0
Является ли это правильный способ сделать это, если я просто хочу, чтобы иметь переменную-член вместо метода?
что с первым методом, который решается вторым ?. Чего вы пытаетесь достичь именно? Разница в том, что первый метод - это оценка времени выполнения, а вторая - время компиляции, потому что 'e' оценивается во время компиляции. – MadeOfAir
Я просто хочу this.Eval быть переменной, которую я могу присвоить значение при построении объекта. Как вы сказали, первый метод - это оценка времени выполнения, но я хочу оценить результат (eval 5 10) один раз. –
Я думаю, что второе решение в порядке, но я бы поставил let внутри класса –