宏语言就普遍不传值,你的例子就失效了。c++,c# 也都可以显式要求按引用传参。
你举的例子是引用语义中变量是从名字到对象的映射(绑定)的一个例子。不少人都喜欢把变量的引用语义理解成变量保存指针值,赋值和传参是对指针按值传递,变量的使用再隐式解引用,这对于C背景的人可能有助于理解,不过这种技术细节其实对描述问题是多余的,程序语言实现也不必然是简单这样做。
一般而言,变量与值的关系不适合像你这样从某种语言具体实现中寻址方式的角度去理解,这其实太特殊了,有时也不符合实际。例如,纯函数式语言具体对象值普遍不可变,但变量的绑定是可变的,这就允许写 a=1 然后写 a=2,但不允许通过 a=a+1 达到这种效果,用变量寻址这种实现细节去解释是很无力的。
【 在 foliver 的大作中提到: 】
: 所有的函数,不管什么语言,都只传递值。需要理解直接寻址和间接寻址。否则只是半吊子理解。
: 就比如这个例子,函数内部写一个lst=[1]。外部调用传入一个变量vlist。你觉得调用后vlist会变么?
:
: ...................
--
FROM 114.249.196.*