我很好奇主要意义是什么,如果有任何关于单位或不使用类似下面的代码。有什么优点或缺点。根据我目前的理解,获取一个单元将实现一个返回值而不取一个值的函数只是简单地表示该值。在这里寻找一些清晰度。
没有单位的代码:
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
}
答案 0 :(得分:2)
第一个代码块将类型query<_>
的值绑定到标识符consumerKey
,而第二个代码块将类型() -> query<_>
的值绑定到标识符consumerKey
。第二个是一个函数,当给定unit
时,它将返回query<_>
类型的值。
在此示例中,两者之间的差异由其签名明确捕获。换句话说,可以通过用()
调用函数值从第二个获得第一个。在运行时方面,第二个将始终返回一个新的底层对象实例,而第一个是固定的。
如果评估会产生副作用,那么同样不会产生副作用。例如,在下面的内容中:
let value1 = Guid.NewGuid()
let value2 () = Guid.NewGuid()
无法通过value1
获取value2
,因为每次调用都会返回不同的值。