计算机编程中,省略号表示法(.. 或 ...)用于表示范围英语range (computer programming)、未指定个数的实参、或者父文件夹。编程语言一般要求省略号写为一系列的句点;不能写为单个的Unicode省略号字符。

范围

编辑

一些编程语言 (如AdaPerlRubyGroovyKotlinHaskellPascal),2个句点作为省略号,用于表示给定两端数值的一个范围。例如,Perl语言的在1至100的整型列表(list)上迭代:foreach (1..100)

Ruby语言的...运算符表示左闭右开范围。

Rust语言的..=运算符包含边界值;而..运算符不包含边界值。

C♯从8.0版本开始支持数组下标访问使用..运算符表示左闭右开范围。例如:

int[] numbers = new[] { 0, 10, 20, 30, 40, 50 };
int start = 1;
int amountToTake = 3;
int[] subset = numbers[start..(start + amountToTake)];
Display(subset);  // output: 10 20 30

//省略部分操作数的写法,其中的 ^ 运算符是C# 8.0版本引入的从尾端计数:
// a.. is equivalent to a..^0  
// ..b is equivalent to 0..b
//  .. is equivalent to 0..^0

Perl与Ruby运算符重载了".."用于标量上下文,这称为翻转运算符 - 有状态英语stateful双稳布尔测试,类似于SedAWK中的","运算符。[1]

GCC编译器提供的C和C++语言编译扩展允许在switch语句英语switch statement中的case ranges:

switch(u) {
  case     0 ...   0x7F : putchar(c); break;
  case  0x80 ...  0x7FF : putchar(0xC0 + c>>6);  putchar( 0x80 + c&0x3f); break;
  case 0x800 ... 0xFFFF : putchar(0xE0 + c>>12); putchar( 0x80 + (c>>6)&0x3f); putchar( 0x80 + (c>>12) ); break;
  default: error("not supported!");
}

GNU C编译器还允许类似的C语言扩展:

int array[10] = { [0...5] = 1 };

Delphi / Turbo Pascal / Free Pascal:

var FilteredChars: set of [#0..#32,#127,'a'..'z'];
var CheckedItems: set of [4,10..38,241,58];

统一建模语言 (UML),2个字符的省略号被用于指出关联(association)的可变基数(cardinality)。例如1..*表示从1个到无穷个(等价于克莱尼星号的用法)。

父文件夹

编辑

Windows和类Unix操作系统把".."用作在文件路径中访问父文件夹

不完整的代码

编辑

Perl语言[2]Raku语言中[3],3字符的省略号也称作"yada yada yada"运算符,语义上表示代码将插入此处。

Python3也允许3字符省略号作为以后插入代码的占位符。

可变数量参数

编辑

C和C++

编辑

C语言的可變參數函數的参数表中,3字符省略号表示更多的不能显式列出的参数。例如:

int printf( const char* format, ... );[4]

上述函数可用不同数据类型和个数的实参来对应。例如:

printf("numbers %i %i %i", 5, 10, 15);

printf("input string %s, %f", "another string", 0.5);

C99引入了variable number of arguments[5]

C++11包含了C99预处理器,[6]并引入了variable number of arguments.[7]

Java

编辑

从版本1.5开始,Java支持了"varargs"功能。例如:

public int func(int num, String... strings)

PHP

编辑

PHP 5.6支持[8]使用省略号定义显式的可變參數函數,其中参数前面的...表示从这个位置开始参数组成一个数组。例如:

function variadic_function($a, $b, ...$other)
{
    return $other;
}

var_dump(variadic_function(1, 2, 3, 4, 5));

输出结果为:

  array(3) {
    [0]=>
    int(3)
    [1]=>
    int(4)
    [2]=>
    int(5)
  }

多维

编辑

Python语言中,特别是NumPy,省略号用于从一个高维数组剪切出任意维度:[9]

>>> import numpy as np
>>> t = np.random.rand(2, 3, 4, 5)
>>> t[..., 0].shape # 从最后一维选出第一个元素,其他维度照搬
(2, 3, 4)
>>> t[0, ...].shape # 从第一维选出第一个元素,其他维度照搬
(3, 4, 5)

其他语义

编辑

MATLAB中,三字符省略号用于指出“续行”[10]

x = [ 1 2 3 ...
4 5 6 ];

语义上等价于:

x = [ 1 2 3 4 5 6 ];

参考文献

编辑
  1. ^ perlop - perldoc.perl.org. [2022-02-19]. (原始内容存档于2012-07-17). 
  2. ^ perlsyn - Perl syntax: declarations, statements, comments - Perldoc Browser. perldoc.perl.org. [2025-01-15]. (原始内容存档于2022-11-12). 
  3. ^ Operators | Raku Documentation. doc.perl6.org. [2025-01-15]. (原始内容存档于2019-06-18). 
  4. ^ printf - C++ Reference. [2022-02-19]. (原始内容存档于2021-03-27). 
  5. ^ Variadic Macros - Using the GNU Compiler Collection (GCC). [2022-02-19]. (原始内容存档于2020-07-04). 
  6. ^ Working draft changes for C99 preprocessor synchronization. www.open-std.org. [2025-01-15]. (原始内容存档于2025-10-11). 
  7. ^ Working Draft, Standard for Programming Language C++ (PDF). [2022-02-19]. (原始内容 (PDF)存档于2019-05-08). 14.5.3 Variadic templates 
  8. ^ PHP: rfc:variadics. wiki.php.net. [2025-03-29]. (原始内容存档于2022-02-21). 
  9. ^ Indexing — NumPy v1.17 Manual. docs.scipy.org. [2025-03-29]. (原始内容存档于2020-04-03). 
  10. ^ Mathworks.com. [2022-02-19]. (原始内容存档于2011-06-29). 

📚 Artikel Terkait di Wikipedia

Io语言

1 Range 1 to(n) foreach(i, res = res * i) ) 由于将res * i赋值给res是方法的最后一个操作,这个函数会隐式地返回这个结果,因此不需要显式地加上一个返回语句。上面这段代码展示了Range(英语:Range (computer programming

列表推导式

list<int> range(10); // range 是一个有10个元素的list, 全是0 iota(begin(range), end(range), 1); // range 现在包含 1,2,...,10 list<int> result = comprehend( range, [](int

Python

(computer programming))关键字,Python的对象方法沿袭自Modula-3,使用显式的第一个形式参数来访问实例特性,习惯上将其命名为self(英语:this (computer programming))。

泛型编程

泛型程序设计(英文:generic programming)是程序设计语言的一种风格或范型。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。各种程序语言和其编译器、运行环境对泛型的支持均不同。Ada、Delphi、Eiffel、Java、C#、F#、Swift

吉多·范罗苏姆

Meertens)与纽约大学的SETL小组相处了一年的时间”。 1999年,吉多·范罗苏姆向DARPA提交了一条名为“Computer Programming for Everybody”的资金申请,并在后来说明了他对Python的目标: 一门简单直观的语言并与主要竞争者一样强大。 开源,以便任何人都可以为它做贡献。

ISWIM

(原始内容存档于2024-04-21).  Turner, D. A., Some History of Functional Programming Languages (PDF), Lecture Notes in Computer Science 7829, Berlin, Heidelberg: Springer Berlin

珠排序

Dinneen)于2002年发展而来,并且在欧洲理论计算机协会(英语:European Association for Theoretical Computer Science)(EATCS)的新闻简报上发表了该算法。无论是电子还是实物上的实现,珠排序都能在 O ( n ) {\displaystyle

Haskell

中的元素,可以使用 !! 运算符。List 中的 List 可以是不同长度,但必须得是相同的型别。['K'..'Z']这样的Range方法快捷定义一个List。[2,4..20]用法给出了Range的第一、第二、最后一个元素。使用 > 和 >= 可以比较 List 的大小。它会先比较第一个元素,若它们的值相等