我再说一个例子: 引号的使用. 写文档时很容易把我绕进去. 如果跑题太远, 我就删了.
引号在日常使用中, 有强调, 引用的意思. 就编程来说, 后者最常见, 我这里就聚焦于引用这个用法.
"变量" 和变量有什么区别? 一般来说, 前者是符号本身, 强调其语法; 后者偏向概念, 强调语义. 这个是比较容易区分的.
但是到编程语境里, 一些情况会把上面这个区分模糊掉:
比如, 引用程序世界中的对象. 比如说我定义了一个变量 x. 变量 x 本质上是一个对象, 是偏概念的. 按照上面的区分, 应该不需要引号. 但写文档时会加上反引号, x
. 这个其实也没有问题, 我可以将反引号理解成, 对编程世界对象的指称, 可以和现实对象区分.
但如果你要较真的话, 会发现很多问题, 或者说容易耗费脑汁的例子:
指称 R 包时, 常见的是不加反引号. 那么 R 包是不是程序中的对象?
假设我定义了一个函数 f. 这三个符号 f, f
, "f" 其实是三个不同的意思. 但有时候为了方便, 这三个意思又会混用. 比如我说参数 x
只接受 1 或 2. 如果在 R 中, 要严格表述, 1 或 2 应该是 1
, 1L
, 2
, 2L
. 比如我说参数 y
只接受 "a" 或 "b" 时, 要严格表述, 应该是 "a"
, "b"
. 但也许是为了方便 (也许是无意识的), 反引号通常是省掉的.
相信大家能体会到, 上面的例子有三种层面的混用:
- 符号本身, 比如 "f"
- 程序世界中的对象, 比如
f
或 (更绕一点) "f"
- 现实世界中概念, 比如 f