为什么使用称为 'literals' 的 'literal syntax' 创建实例?
Why are instances created using a 'literal syntax' known as 'literals'?
令我困扰的是为什么术语 'literal' 用于指代 class 的实例,例如 NSString
和 NSArray
。我只看到在引用 NSString
时使用的术语,我天真地认为它与它有关 'literally' 是一个字符串,在引号之间。对不起,如果这听起来很可悲,但我就是这么想的。
然后今天我了解到 NSArray
的某些实例也可以称为文字实例,即使用 'literal syntax'.[=16= 创建的 class 的实例]
文字语法或文字只是使用语言内置的专用语法创建的对象,而不是使用正常的对象创建语法(无论是什么)创建的对象。
这里我创建了一个文字数组:
NSArray* a = @[@"Hello", @"World"];
就所有意图和目的而言,这等同于:
NSArray* a = [NSArray arrayWithObjects:@"Hello", @"World", nil];
第一个被称为文字,因为 @[]
语法内置于创建数组的语言中,与内置 @"..."
语法用于创建 NSString
的方式相同秒。
the term 'literal' is used to refer to instances of classes
它并不是真的指实例;创建对象后,创建方式无关紧要:
NSArray * thisWasCreatedWithALiteral = @[@1, @2];
NSArray * butWhoCares = thisWasCreatedWithALiteral;
"literal"部分只是特殊语法@[@1, @2]
,
it ha[s] something to do with it 'literally' being a string, that is between quotation markers.
完全正确:这是数组的 写出 表示,而不是使用 arrayWithObjects:
等构造方法创建的数组
正如@Linuxios 指出的那样,文字语法内置于该语言中。不过,它们比您想象的要广泛。文字只是意味着实际值在源代码中编码。所以 ObjC 中有相当多的文字语法。例如:
1
- 整数
1.0
- 双
1.0f
- 浮动
"a"
- C 字符串
@"a"
- NSString
@[]
- NSArray
^{}
- 函数
是的,块只是函数文字。它们是可分配给符号名称(例如变量或常量)的匿名值。
一般来说,文字可以存储在文本段中,并在编译时计算(而不是在 运行 时)。如果我没记错的话,数组文字目前被扩展为等效代码并在 运行 时间进行评估,但是 @"..."
字符串文字被编码为二进制文件作为静态数据(至少现在是这样;非 Apple我记得 gcc 的版本用于对实际函数调用进行编码以构造静态字符串)。
令我困扰的是为什么术语 'literal' 用于指代 class 的实例,例如 NSString
和 NSArray
。我只看到在引用 NSString
时使用的术语,我天真地认为它与它有关 'literally' 是一个字符串,在引号之间。对不起,如果这听起来很可悲,但我就是这么想的。
然后今天我了解到 NSArray
的某些实例也可以称为文字实例,即使用 'literal syntax'.[=16= 创建的 class 的实例]
文字语法或文字只是使用语言内置的专用语法创建的对象,而不是使用正常的对象创建语法(无论是什么)创建的对象。
这里我创建了一个文字数组:
NSArray* a = @[@"Hello", @"World"];
就所有意图和目的而言,这等同于:
NSArray* a = [NSArray arrayWithObjects:@"Hello", @"World", nil];
第一个被称为文字,因为 @[]
语法内置于创建数组的语言中,与内置 @"..."
语法用于创建 NSString
的方式相同秒。
the term 'literal' is used to refer to instances of classes
它并不是真的指实例;创建对象后,创建方式无关紧要:
NSArray * thisWasCreatedWithALiteral = @[@1, @2];
NSArray * butWhoCares = thisWasCreatedWithALiteral;
"literal"部分只是特殊语法@[@1, @2]
,
it ha[s] something to do with it 'literally' being a string, that is between quotation markers.
完全正确:这是数组的 写出 表示,而不是使用 arrayWithObjects:
正如@Linuxios 指出的那样,文字语法内置于该语言中。不过,它们比您想象的要广泛。文字只是意味着实际值在源代码中编码。所以 ObjC 中有相当多的文字语法。例如:
1
- 整数1.0
- 双1.0f
- 浮动"a"
- C 字符串@"a"
- NSString@[]
- NSArray^{}
- 函数
是的,块只是函数文字。它们是可分配给符号名称(例如变量或常量)的匿名值。
一般来说,文字可以存储在文本段中,并在编译时计算(而不是在 运行 时)。如果我没记错的话,数组文字目前被扩展为等效代码并在 运行 时间进行评估,但是 @"..."
字符串文字被编码为二进制文件作为静态数据(至少现在是这样;非 Apple我记得 gcc 的版本用于对实际函数调用进行编码以构造静态字符串)。