【问题标题】:Why is the return type Unit used to describe operations that have no return value in Q#; as opposed to void or none?Q#中为什么用返回类型Unit来描述没有返回值的操作;相对于无效或无?
【发布时间】:2023-03-14 06:52:01
【问题描述】:

为什么微软在创建 Q# 时决定使用关键字 Unit 而不是 void 或 none 来描述没有返回值的方法?这是有原因的,还是微软只是想做一些不同的事情?

【问题讨论】:

    标签: q#


    【解决方案1】:

    Q# 中的函数和操作始终是元组输入元组输出。 再加上单例-元组等价('T('T) 是完全相同的类型的原理),这让 Q# 可以统一地表示事物,每个函数和操作都只接受一个输入并返回一个输出,其中每个是元组。

    这种方法的一个结果是我们可以编写像Composed<'T, 'U, 'V>(inner : ('T -> 'U), outer : ('U -> 'V)) : ('T -> 'V) 这样的函数,确信我们可以将任何 函数作为inner 传递,而无需考虑它需要多少参数。

    为了使这种设计保持一致,我们需要一个“不返回任何内容”的函数或操作返回一个空元组,而不是根本没有任何值。在许多函数式语言(包括 F#)中,空元组的类型称为 unitUnit,遵循类型论中的传统表示法。在 Q# 中,我们决定遵循这一传统来阐明值 () 和类型 Unit 之间的区别。

    【讨论】:

    • james-iry.blogspot.com/2009/07/void-vs-unit.html 很好地讨论了 Unit 和 void 之间的区别,扩展了 Chris 所说的内容。
    • 您说的是 () 和 Unit 有区别,返回类型是 Unit 而不是 ()。但是,在 Visual Studio Code 中,Q# 的 IntelliSense 告诉我单元“表示其唯一值为 () 的单例类型”,如从 VSCode 截取的屏幕截图中所述:app.box.com/s/bjywq8oxvqphfdkexzoot0wdemv0i11r
    • @AJ_4real,Unit和()有区别:Unit是一个类型,()是那个类型的值。把它想象成 Bool 和 true; Bool 是一种类型,true 是该类型的值。 Bool 当然有两个可能的值,而 Unit 只有一个。
    猜你喜欢
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2020-02-04
    • 1970-01-01
    • 2019-10-21
    • 2021-07-17
    相关资源
    最近更新 更多