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
类型的值绑定到identifierconsumerKey
,而第二个代码块将()->query
类型的值绑定到identifierconsumerKey
。第二个是一个函数,当给定unit
时,它将返回query
类型的值
在本例中,两者之间的差异由其签名显式捕获。换句话说,第一个可以通过使用()
调用函数值从第二个获得。在运行时方面,第二个实例总是返回一个新的底层对象实例,而第一个实例是固定的
如果评估导致副作用,则不适用。例如,在thw中:
let value1 = Guid.NewGuid()
let value2 () = Guid.NewGuid()
无法通过value2
获取value1
,因为每次调用都会返回不同的值