0

我试图了解标识符代表什么以及它们不代表什么。

据我了解,标识符是方法、常量、变量、类、包/模块的名称。它涵盖了很多。但是你不能用它做什么?

4

8 回答 8

3

每种语言在可以或不能在该语言中命名和重用的实体/抽象方面都不同。

于 2009-03-29T19:24:31.010 回答
3

在大多数语言中,您不能将标识符用于中缀算术运算。

例如,plus是一个标识符,您可以创建一个名为plus. 但是 write you can write a = b + c;,没有办法定义一个命名的运算符plusa = b plus c;工作,因为语言语法根本不允许在那里使用标识符。

于 2011-03-07T05:05:00.953 回答
2

标识符允许您为某些数据分配名称,以便您以后可以引用它。这就是标识符所做的限制;除了对某些数据的引用之外,您不能“使用”它。

也就是说,这会产生很多影响,有些微妙。例如,在大多数语言中,函数在某种程度上被视为数据,因此函数名称是标识符。在函数是值而不是“一等”值的语言中,您不能在可以将标识符用于其他东西的地方使用函数的标识符。在某些语言中,函数和其他数据甚至会有单独的命名空间,因此文本上相同的标识符可能指代两个不同的事物,并且它们将通过使用它们的上下文来区分。

您通常(即在大多数语言中)不能使用标识符的一个示例是作为对语言关键字的引用。比如这种事情一般是做不到的:

let during = while;
during (true) { print("Hello, world."); }
于 2009-06-20T04:06:44.347 回答
1

您可以说它用于您想要多次引用的所有内容,甚至可能一次(但使用它来阐明所指对象的目的)。

可以/不能命名的内容因语言而异,恕我直言,它通常非常直观。

“匿名”实体是没有命名的东西,尽管以某种方式被提及。

#!/usr/bin/perl
$subroutine = sub { return "Anonymous subroutine returning this text"; }

在 Perl 语言中,这是匿名的——子例程没有命名,但它被引用变量 $subroutine 引用。

PS:在 Perl 中,子程序的命名如下:

sub NAME_HERE {
    # some code...
}
于 2009-03-29T19:31:13.897 回答
1

说,在Java中你不能写这样的东西:

Object myIf = if;
myIf (a == b) {
    System.out.println("True!");
}  

所以,你不能命名一些代码语句,给它一个别名。在REBOL中,这是完全可能的:

myIf: if
myIf a = b [print "True!"]

如您所见,什么可以命名,什么不能命名取决于语言。

于 2009-03-29T19:36:34.303 回答
0

顾名思义,标识符用于标识某物。因此对于可以唯一标识的所有内容,您可以使用标识符。但是例如文字(例如字符串文字)不是唯一的,因此您不能为其使用标识符。但是,您可以创建一个变量并为其分配一个字符串文字。

于 2009-03-29T19:30:16.160 回答
0

把它们煮成汤是相当肮脏的。

在诸如 Lisp 之类的语言中,标识符本身作为符号存在,而在不是自省的语言中,标识符在运行时中不存在。

您可以通过在其前面放一个单引号来编写文字标识符/符号:

[1]> 'a
A

您可以创建一个变量并为其分配一个符号文字:

[2]> (setf a 'Hello)
HELLO
[3]> a
HELLO
[4]> (print a)

HELLO 
HELLO

您可以将两个变量设置为相同的符号

[10]> (setf b a)
HELLO
[11]> b
HELLO
[12]> a
HELLO
[13]> (eq b a)
T
[14]> (eq b 'Hello)
T

注意b和a绑定的值是一样的,值是字面符号'Hello

您可以将函数绑定到符号

[15]> (defun hello () (print 'hello))
HELLO

并称之为:

[16]> (hello)

HELLO 
HELLO

在 common lisp 中,变量绑定和函数绑定是不同的

[19]> (setf hello 'goodbye)
GOODBYE
[20]> hello
GOODBYE
[21]> (hello)

HELLO 
HELLO

但在 Scheme 或 JavaScript 中,绑定在同一个命名空间中。

如果将标识符具体化为符号,您还可以对标识符进行许多其他操作。我怀疑在 Lisp 中比我更博学的人将能够证明存在您“无法使用标识符”的任何事情。

但即使是 Lisp 也无法制作标识符汤。

于 2009-03-29T20:05:35.857 回答
0

有点左字段的想法,但 JSON 中包含所有这些引号,以消除 JavaScript 关键字弄乱解析的危险。

于 2009-06-20T04:12:26.423 回答