我正在尝试了解identifiers代表什么以及它们不代表什么。
据我了解,标识符是方法,常量,变量,类,包/模块的名称。它涵盖了很多。但你能用它做什么呢?
答案 0 :(得分:3)
每种语言在哪些实体/抽象可以或不可以在该语言中被命名和重用方面都有所不同。
答案 1 :(得分:3)
在大多数语言中,您不能使用标识符进行中缀算术运算。
例如,plus
是一个标识符,您可以创建一个名为plus
的函数。但是写一下你可以写a = b + c;
,没有办法定义一个名为plus
的运算符来使a = b plus c;
起作用,因为语法语法根本不允许使用标识符。
答案 2 :(得分:2)
标识符允许您为某些数据指定名称,以便稍后引用。这是标识符的限制;除了对某些数据的引用之外,你不能“使用”它。
也就是说,这有很多含义,有些含蓄。例如,在大多数语言中,函数在某种程度上被认为是数据,因此函数名称是标识符。在函数是值但不是“第一类”值的语言中,您不能在某个地方使用函数的标识符,您可以将标识符用于其他内容。在某些语言中,函数和其他数据甚至会有单独的命名空间,因此在文本上相同的标识符可能引用两个不同的东西,并且它们将通过使用它们的上下文来区分。
您通常(即,在大多数语言中)不能使用标识符的示例是作为对语言关键字的引用。例如,通常无法做到这种事情:
let during = while;
during (true) { print("Hello, world."); }
答案 3 :(得分:1)
你可以说它用于你想要多次引用的所有东西,或者甚至一次(但用它来澄清指示物的目的)。
可以/不能命名的内容因语言而异,通常非常直观,恕我直言。
“匿名”实体是未命名的东西,尽管以某种方式提及。
#!/usr/bin/perl
$subroutine = sub { return "Anonymous subroutine returning this text"; }
在Perl-speak中,这是匿名的 - 子程序没有命名,但引用变量$ subroutine引用它。
PS:在Perl中,子程序的名称如下:
sub NAME_HERE {
# some code...
}
答案 4 :(得分:1)
说,在Java中你不能写出类似的内容:
Object myIf = if;
myIf (a == b) {
System.out.println("True!");
}
所以,你不能命名一些代码语句,给它一个别名。在REBOL中,完全有可能:
myIf: if
myIf a = b [print "True!"]
如你所见,什么可以和什么不能命名取决于语言。
答案 5 :(得分:0)
如其名称所示,标识符用于标识某些内容。因此,对于可以唯一标识的所有内容,您可以使用标识符。但是,例如文字(例如字符串文字)不是唯一的,因此您不能使用标识符。但是,您可以创建变量并为其指定字符串文字。
答案 6 :(得分: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
在常见的lisp中,变量绑定和函数绑定是不同的
[19]> (setf hello 'goodbye)
GOODBYE
[20]> hello
GOODBYE
[21]> (hello)
HELLO
HELLO
但在Scheme或JavaScript中,绑定位于同一名称空间中。
如果将标识符用作符号,则可以使用标识符执行许多其他操作。我怀疑在Lisp中比我更了解的人将能够展示你不能用标识符做的任何事情。
但即便是Lisp也无法制作标识符汤。
答案 7 :(得分:0)
左侧字段思维的排序,但JSON中包含所有这些引用,以消除JavaScript关键字搞乱解析的危险。