F#问题
海の云 2014-10-03 11:32:32 open System
type LoggingValue<'a> =
| Log of 'a * list<string>
// Listing 12.23 Computation builder that adds logging support
type LoggingBuilder() =
member x.Bind(Log(v, logs1), f) = // Unwrap the value and log buffer
// Run the rest of the computation
let (Log(nv, logs2)) = f(v)
//logs2.
// Wrap the value and merge log buffers
Log(nv, logs1 @ logs2)
// Augment value with an empty log
member x.Return(v) = Log(v, [])
// No value with an empty log
member x.Zero() = Log((), [])
let log = new LoggingBuilder()
let logMessage(s) = Log((), [s])
// Listing 12.24 Logging using computation expressions
// Writes string to console and to the log
let write(s) = log {
do! logMessage("writing: " + s)
Console.Write(s) }
let read() = log {
do! logMessage("reading...")
return Console.ReadLine() }
let testIt () = log {
// Call the primitive logging function
do! logMessage("starting...")
// Call function written using computation expressions
do! write("Enter your name:")
// Using customized value binding
let! name = read()
return "Hello " + name + "!" }
let testShow2 = testIt ();
printfn "%A" testShow2
请问下这里 let (Log(nv, logs2)) = f(v)是什么意思 为什么去掉括号后let Log(nv, logs2) = f(v)
则后面的 Log(nv, logs1 @ logs2) 中nv 和 logs2就看不到了