作者mystea (mystea)
看板PLT
标题Re: [问题] 为什麽local variable的scope不能延及ꐠ…
时间Wed Mar 5 17:05:41 2008
※ 引述《godfat (godfat 真常)》之铭言:
: ※ 引述《mystea (mystea)》之铭言:
: : 大家好, 我有一个粗浅的关於scope的问题想请教大家.
: : 写程式的时候, local variable的scope都仅限於自己这个函数,
: : 如果想用子函式去碰就非得pass by reference传进去才行.
: 其实这不见得是一个好主意,因为我们写程式本来就要尽量减少
: dependency, side-effect, 等等东西。不是说要去碰就非得
: call by reference, 而是除非必要,否则尽量不要这麽做。
请问您所提的减少dependency是不是指希望有generality以增加重复使用的机会?
但其实有时候call by reference并不一定减少了generality. 比方说我想写一个
fit line的程式, 输入值是两个平面上的点, 输出值是直线方程式的a和b; 因为输出值
超过一个, 所以不用pass by reference不行, 但是既然目标很明确, 两个平面上的点
的资料型态并不是母程式独有的, 那重复利用性应该也不差才是阿...
: : 我初学scope时, 老师跟我说这样主要的目的是为了名称可以重复使用.
: 这个说法我是觉得太随便了,名称重复使用是很细微的事了。
: 我想你应该已经知道 local variable 的一些好处,
: 所以一些对於 local variable 的说明我就删去了....
: (刚刚不小心打了不少,才注意到标题的问题,
: 好像不是问 local variable 本身....)
: 首先请考虑递回的状况,你要怎麽单单使用 namespace 指定 variable?
: 然而,local scope 存在的时候,那个 local variable 又真的是存在?
: 当你在说 son::i 时,son 被唤起了吗?没有的话这个 son::i 是指谁?
: 其实写程式是要尽量减少 side-effect, 不能避免时才使用 side-effect,
: 这是为了降低程式复杂度与相依性,使得程式可重复利用性更高。
: 如此一来,直接去接触其他某个 local scope 下的 variable,
: 是和这种目标相违背的。在 functional language 中,这种限制会更严格。
其实我在打第一段的回应时有想到: 要是在子程序里呼叫main:i的话, generality
确实是有问题. 因为这样子的话这个子程序只能用在有i的main里面, 而且i的意义只能
有一个.
但是如果我的子程序是在动态宣告母程序里的local variable的话, 好像就不会违反
generality了. 比方说我写一个fit line的程式, 输入是两个点的座标, 输出则是两
个叫做fitline_a, fitline_b的 母程序里的 local variable, 像这样的话重复利用性
好像还要更好呢! (因为使用之前不需要特别为他宣告两个变数)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 76.170.235.113