当前位置: 首页 > 编程笔记 >

F# 0元组有什么用?

庄星汉
2023-03-14
本文向大家介绍F# 0元组有什么用?,包括了F# 0元组有什么用?的使用技巧和注意事项,需要的朋友参考一下

示例

2元组或3元组表示一组相关项。(2D空间中的点数,颜色的RGB值等。)1元组不是很有用,因为可以很容易地将其替换为单个1 int。

一个0元组似乎毫无用处,因为它绝对包含任何东西。但是它具有的特性使其在F#等功能语言中非常有用。例如,0元组类型只有一个值,通常表示为()。所有0元组都具有此值,因此本质上是单例类型。在包括F#在内的大多数功能编程语言中,这称为unit类型。

void以C#返回的函数将以unitF#返回类型:

let printResult = printfn "Hello"

在F#交互式解释器中运行该代码,您将看到:

val printResult : unit = ()

这意味着该值printResult是类型unit,并且具有值()(空元组,该unit类型的唯一值)。

函数也可以将unit类型作为参数。在F#中,函数看起来好像没有参数。但实际上,它们只是采用type的单个参数unit。该功能:

let doMath() = 2 + 4

实际上等效于:

let doMath () = 2 + 4

就是说,一个带有一个类型参数unit并返回int值6的函数。如果您在定义此函数时查看F#交互式解释器打印的类型签名,则会看到:

val doMath : unit -> int

所有函数都将至少使用一个参数并返回一个值,即使该值有时是一个“无用的”值(例如)(),这一事实意味着F#中的函数组合比没有unit类型的语言要容易得多。但这是一个更高级的主题,我们将在以后讨论。现在,请记住,当您unit在函数签名或()函数的参数中看到时,这就是0元组类型,它表示“此函数不接受或返回任何有意义的值”。

 类似资料:
  • 问题内容: 我试图定义一个可以容纳闭包的变量,并且使用Swift的速记参数名称遇到了一些困难。采取以下代码段: 这给了我编译错误 ‘(String,String)’无法转换为’String’ 。当我修改闭包时,返回带有第一个参数值的字符串,我将两个参数值都返回到一个元组中。 但是,如果我修改闭包以打印第二个参数,则会按预期打印正确的参数。 我感觉自己在这里做些愚蠢的事情,但是我找不到任何解释为什么

  • 问题内容: 我正在阅读一个python脚本,该脚本接受XML文件的输入并输出XML文件。但是,我不了解打印语法。可有人请解释什么的呢? 问题答案: 该方法格式化字符串字面量 和它的新功能。 甲 格式的字符串文字 或 F-串 是前缀字符串文字或。这些字符串可能包含替换字段,这些替换字段由花括号分隔。尽管其他字符串文字始终具有恒定值,但是格式化的字符串实际上是在运行时评估的表达式。 格式化字符串文字的

  • 问题内容: 请帮助我根据功能上的差异来阐明这两个python语句的概念: 问题答案: 根据文档: 退出状态为n的进程,而无需调用清理处理程序,刷新stdio缓冲区等。 注意 退出的标准方法是。通常只应在。之后的子进程中使用。

  • 问题内容: 有什么不同? 元组/列表的优点/缺点是什么? 问题答案: 除了元组是不可变的之外,还应有语义上的区别来指导它们的使用。元组是异构数据结构(即,它们的条目具有不同的含义),而列表是同类序列。元组具有结构,列表具有顺序。 使用这种区别可以使代码更加明确和易于理解。 一个示例是成对的页和行号,以指向一本书中的参考位置,例如: 然后,您可以将其用作字典中的键来存储有关位置的注释。另一方面,列表

  • 为什么在数组中需要参数新字符串[0]?

  • 问题内容: 我最近遇到了一个令人讨厌的错误,该错误中的代码是通过JavaScript动态加载的。动态加载的具有预先选择的值。在IE6中,我们已经有代码来修复selected ,因为有时的值可能与selected 的属性不同步,如下所示: 但是,此代码无法正常工作。即使正确设置了字段,最终也会选择错误的索引。但是,如果我在正确的时间插入一条语句,则会选择正确的选项。考虑到这可能是某种时序问题,我尝试