我理解,无论何时在源代码中表示固定值,都应用概念 literal ,就像它要解释的那样,与变量或一个常量,分别是几个类或其中一个的名称。
但他们也反对表达。我认为这是因为他们可以合并变量。但是即使像1+2
这样的表达也不是(参见What does the word "literal" mean?中的第一个答案)。
所以,当我以这种方式定义变量时:
var=1+2
1+2
不是文字,即使它不是名称并且评估为单个值。我可以猜测它是因为它不能直接代表目标值;换句话说,文字代表一个值" 完全一样"。
但那么像这样的函数怎么可能是一个文字(如同指向相同的链接答案)?
(x) => x*x
答案 0 :(得分:1)
只有匿名函数可以是文字的,因为它们没有绑定到标识符 so(x)=> x * x是文字,因为它是匿名函数或函数文字 但是一个
void my_func()
{#something}
不是文字因素,它与标识符绑定; 读这些, https://en.wikipedia.org/wiki/Literal_(computer_programming) https://en.wikipedia.org/wiki/Anonymous_function
答案 1 :(得分:1)
表达式可以分为两种通用类型:原子表达式和复合表达式。
复合表达式可以按运算符划分,依此类推;原子表达式可以分为变量,常量和文字。我猜不同的作者可能会在这里使用其他类别或边界,因此它可能不是通用的。但我会争论为什么这种分类可能有意义。
为什么字符串或数字是文字,或者为什么总和不是,这是相当明显的。函数调用可以被认为是复合函数,因为它对子表达式 - 其参数进行操作。函数定义不对子表达式起作用。只有在调用了如此定义的函数时,该调用才会将参数传递给函数。在编译语言中,匿名函数可能会被相应代码所在的目标地址所取代 - 该内存位置显然不依赖于任何子表达式。
@ rdRahul的回答引用this Wikipedia article,它表示对象文字,例如{"cat", "dog"}
可以被视为文字。通过指出作为表达式值的对象只是一个不透明的东西,例如指向对象的内存位置的指针,可以很容易地论证这一点。