- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
据我所知,“...”表示以下代码段中数组的长度。
var days := [...]string { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }
另一方面,“...”意味着将 slice y
解包为下面片段中的 int 参数,我猜。我不太确定。
x := []int{1,2,3}
y := []int{4,5,6}
x = append(x, y...)
现在,这两种含义的不同让我很难理解“...”是什么。
最佳答案
您已经注意到 Go 中 ...
的两种情况。其实有3个:
[...]int{1,2,3}
在编译时评估为 [3]int{1,2,3}
a := make([]int, 500)
SomeVariadicFunc(a...)
将 a
解包为函数的参数。这与您错过的可变参数定义相匹配:
func SomeVariadicFunc(a ...int)
现在是进一步的问题(来自对 OP 的评论)——为什么......在所有这些情况下都可以在语义上工作?答案是在英语(和其他语言)中,这是称为 ellipsis .来自那篇文章
Ellipsis (plural ellipses; from the Ancient Greek: ἔλλειψις, élleipsis, "omission" or "falling short") is a series of dots that usually indicates an intentional omission of a word, sentence, or whole section from a text without altering its original meaning.1 Depending on their context and placement in a sentence, ellipses can also indicate an unfinished thought, a leading statement, a slight pause, and a nervous or awkward silence.
在数组的情况下,这匹配“一个单词、句子或整个部分的省略”定义。您省略了数组的大小,让编译器为您计算出来。
在可变参数的情况下,它使用相同的含义,但不同。它也有“未完成的想法”的暗示。我们经常用“...”来表示“等等”。 “我要去买面包、鸡蛋、牛奶……”在这种情况下,“……”表示“其他类似于面包、鸡蛋和牛奶的东西”。例如,append
中的使用表示“此列表的一个元素,以及所有其他元素”。这可能是不太直观的用法,但对于母语人士来说,这是有道理的。也许更“语言纯”的结构应该是 a[0]...
甚至 a[0], a[1], a[2]...
但这会导致空 slice 的明显问题(使用 ...
语法),更不用说冗长了。
一般来说,“...”用于表示“许多事情”,因此这两种用法都有意义。许多数组元素,许多 slice 元素(虽然一个是创建,另一个是调用)。
我想隐藏的问题是“这是好的语言设计吗?”一方面,一旦你了解了语法,它对大多数以英语为母语的人来说都是非常有意义的,所以从这个意义上说它是成功的。另一方面,不以这种方式重载符号是有值(value)的。我可能会为数组解包选择不同的符号,但我不能因为使用对语言设计者来说可能很直观的符号而责怪他们。特别是因为数组版本甚至不经常使用。
如前所述,这对编译器来说没有问题,因为情况永远不会重叠。你永远不能让 [...]
也意味着“解压”,所以没有符号冲突。
(旁白:我省略了它在 Go 中的另一种用法,因为它不在语言本身中,而是在构建工具中。键入 go test ./...
之类的内容意味着“测试这个包,以及这个包的子目录中的所有包”。但是我对其他用途的解释应该很清楚,为什么它在这里有意义。)
关于go - 三个点是否包含多个含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24340379/
我很困惑 ...作品。 tt = function(...) { return(x) } 为什么不tt(x = 2)返回 2 ? 相反,它因错误而失败: Error in tt(x = 2) :
展开运算符是否具有异常功能?喜欢: originalObject = { key1: '', key2: '', key3: '' } const clonedOr
这个问题在这里已经有了答案: text-overflow is not working when using display:flex (5 个答案) 关闭 3 年前。
我的问题是,为什么“text-overflow:ellipsis;”对我不起作用?我的页面上有表格,我想缩短单元格 (td) 中的一些文本。如您所见,我在 css 中没有宽度参数。我从 json 获取
不幸的是,我无法为 EditText 作品制作椭圆大小。当文本太长时,甚至可以在文本末尾放置三个点吗?它适用于 TextiView 但不适用于 EditText。有什么想法吗? android:id
这个问题在这里已经有了答案: What do 3 dots next to a parameter type mean in Java? (9 个回答) 关闭 6 年前。 三个点(...)在方法定义
我想使额外的文本成为三个点 (...) 省略号,当我单击这些点时,文本应该展开和收缩。但是使用代码时,文本只会收缩,不会在点击点时展开 .overflow{ display:inline
我不想在我的视频中显示播放速度,是否有任何控件或 controlList禁用该选项的属性,如 controls disablepictureinpicture controlslist="nodown
我需要从提示文本中删除省略号(三个点)并希望显示完整的文本。我正在使用 TextInputLayout 小部件。 向 TextInputEditText 添加 ellipsize 属性不起作用。 下面
我刚刚开始学习 Android,在应用中创建菜单时遇到了一些麻烦。 我尝试了所有选项来创建菜单,但没有一个适合我。 当我运行模拟器或真实设备菜单时没有出现。我试过“Ctrl+M”和不同的设备,但它不起
在 Javascript 中阅读这个语法真的让我感到困惑: router.route('/:id') .put((...args) => controller.update(...args)) .ge
我正在查看 jQuery 的 jScroll 插件的文档页面 (http://demos.flesler.com/jquery/scrollTo),我注意到了这一点: $(...).scrollTo(
我想把图标染成白色。 这是工具栏: 还有样式: @color/primary @color/primaryDark @color/accent @color/ba
这似乎是一个愚蠢的问题,但是当我尝试在 SOF 中查看这个答案时, Compile time generated tables 我注意到这样的陈述: template constexpr auto m
我是否使用 androidx.compose.foundation.text.BasicText或 androidx.compose.material.Text ,如果没有足够的空间放置文本,它将换行
我有一个带有 的 Xamarin.Forms UWP 应用程序用两个 toolbarItem 定义。在 UWP 中,此工具栏呈现但显示一个带有 3 个点的额外(或默认)按钮,该按钮展开但不包含任何按
如问题中所述,我正在尝试使用从 MySQL 的文本字段读取数据的 PHP 生成 XML 输出(用于 iPhone 应用程序)。 每当字段中出现水平省略号时... XML 生成不正确。 我已经尝试了几种
实际问题 是否可以为 的一组签名参数定义方法?包括 ... (相对于 专门 用于 ... )? “开箱即用”是不可能的,但理论上它会是 完全有可能 (涉及一些调整)或者这是由于 S4 机制的设计方式而
我想调用一个使用 ...(省略号)参数的 R 函数来支持未定义数量的参数: f f(1, a = 1, b = 2) [1] "a=1, b=2" 如何为 ... 传递我只在运行时知道的实际参数(例
假设我有两个分支,master 和 feature。 目标是在 Github 上以可视化方式查看 master 和 feature 之间的全部差异。默认情况下这是不可能的,因为 Github 使用 g
我是一名优秀的程序员,十分优秀!