F# 使用单元和不使用单元有什么区别?

F# 使用单元和不使用单元有什么区别?,f#,F#,我很好奇,如果有什么重要的意义,是关于采取一个单位或不是在代码类似于下面。优点和缺点是什么。根据我目前的理解,取一个单位将实现一个返回值的函数,而不取一个单位只是表示值。在这里寻找一些清晰 无单位代码: let consumerKey = // retrieve keys query{ for row in db.Keys do select { consumerKey =

我很好奇,如果有什么重要的意义,是关于采取一个单位或不是在代码类似于下面。优点和缺点是什么。根据我目前的理解,取一个单位将实现一个返回值的函数,而不取一个单位只是表示值。在这里寻找一些清晰

无单位代码:

    let consumerKey = 

        // retrieve keys
        query{
            for row in db.Keys do
            select {
                consumerKey = row.ConsumerKey;
                consumerSecret = row.ConsumerSecret
            }
            exactlyOneOrDefault
        }
带单位的代码:

    let consumerKey() = 

        // retrieve keys
        query{
            for row in db.Keys do
            select {
                consumerKey = row.ConsumerKey;
                consumerSecret = row.ConsumerSecret
            }
            exactlyOneOrDefault
        }

第一个代码块将
query
类型的值绑定到identifier
consumerKey
,而第二个代码块将
()->query
类型的值绑定到identifier
consumerKey
。第二个是一个函数,当给定
unit
时,它将返回
query
类型的值

在本例中,两者之间的差异由其签名显式捕获。换句话说,第一个可以通过使用
()
调用函数值从第二个获得。在运行时方面,第二个实例总是返回一个新的底层对象实例,而第一个实例是固定的

如果评估导致副作用,则不适用。例如,在thw中:

let value1 = Guid.NewGuid()
let value2 () = Guid.NewGuid()
无法通过
value2
获取
value1
,因为每次调用都会返回不同的值