主题:奇妙的宏替换
moz
[专家分:37620] 发布于 2007-06-09 16:34:00
VFP的宏替换,的确是一样很莫名其妙的东西.
因为有了宏替换,VFP比很多语言都危险得多,也方便得多.
有一道算式:
1 2 3 4 5 6 7 8 = N
上算式中的N由键盘给出(1<=N<=100),请在算式的每个空挡内都填入+、-、*、/四种运算符中的任意一个,使结果等于N
n1=VAL(INPUTBOX("输入目标值N:","输入"))
a1="1"
For i = 2 To 8
a1=a1+" "+LTRIM(Str(i))
Next
For i1 = 0 To 4 ^ 7
f1=i1
FOR j1=1 TO 7
a1=Stuff(a1,j1*2,1,SUBSTR("+-*/",MOD(f1,4)+1,1))
f1=INT(f1/4)
ENDFOR
IF n1=&a1 [color=ff00ff]用其他语言可要费一番周折.[/color]
MESSAGEBOX(a1)
EXIT
ENDIF
NEXT
回复列表 (共32个回复)
11 楼
lwh1188 [专家分:25840] 发布于 2007-06-12 00:11:00
宏替换是不错!可能也正因为有了“宏”这个“不确定”的东西VFP的编译不得不是伪编译了!
12 楼
北京种子乐 [专家分:3710] 发布于 2007-06-12 00:40:00
如果是那样,是利大还是弊大就很难说了。
13 楼
wuzhouhong [专家分:10890] 发布于 2007-06-12 14:22:00
宏替换这个东西,我认为是无聊的程序人员搞出来的玩笑,为了片面追求程序功能的完备,牺牲了部分程序的严谨性,增加了不可预料的错误的出现的可能性。
微软后来意识到了这个错误,又打肿脸不愿意承认,就搞出了()表达式和EVALUATE()函数,合理使用这两个函数,可以完全代替宏替换的功能。
我的意见是:不要使用宏替换,而以()表达式和EVALUATE()函数代替,这样大部分错误就可以被编译器发现,减少很多莫名其妙的错误的出现。
14 楼
jinlonggao [专家分:17130] 发布于 2007-06-12 18:38:00
楼上先生话虽说得没错,但语言却让人不能接受,我们都是VFP爱好者,使用VFP的人最长有16年之久,试问我们中有多少人花钱买了VFP软件?
做人要讲良心,要知感恩.免费用VFP,就要爱护它,并容忍它的不足,更要允许它改进.
--------------------------------------------------------------------------
所以,我对楼上先生那些带刺的话实在不能接受!
并旗帜鲜明地赞成"宏代换"!
15 楼
0901chang [专家分:10660] 发布于 2007-06-12 19:00:00
如果,人类的手也同时拥有鸟翅膀的功能,腿又象鸵鸟那样善于奔跑,那将节省地球的很多能源。
16 楼
moz [专家分:37620] 发布于 2007-06-12 19:26:00
13楼评30分
14楼评0分
哈哈
我赞成13楼的意见,却无法反对14楼的说法,我也不想用宏替换,却很无奈的说。
就好比是邓小平改革开放的心情,哈哈。
17 楼
北京种子乐 [专家分:3710] 发布于 2007-06-12 19:53:00
[quote]合理使用这两个函数,可以完全代替宏替换的功能。[/quote]
一言一为知,
一言一为不知,
言之不可不慎也。
意思是说,一句话人家可能认为你有知识,一句话人家可能认为你没有知识,说话不可不慎重。
其它观点且不多说,单说13楼讲的“合理使用这两个函数,可以完全代替宏替换的功能。”,这种说法是错误的。事实是有一些情况()表达式和EVALUATE()函数是替代不了宏替换的。单从这一句话就可说明13楼对VFP懂的很少,严格的说就是不懂。
18 楼
琅拿度 [专家分:2820] 发布于 2007-06-12 21:37:00
宏替换,为我省了很多麻烦,我甚至在表单上 text 里,写上命令,再宏替换去执行命令。
我入门而已,接触不多,但我认为 & 是个好东西。
19 楼
0901chang [专家分:10660] 发布于 2007-06-13 08:54:00
用菜刀来切菜,每年有许多人因此而伤手,还有一些人被菜刀砍死,任何事情都可能有其两面性。我被菜刀伤过好几次手,但愿我不会被菜刀砍死。
20 楼
jinlonggao [专家分:17130] 发布于 2007-06-13 09:41:00
MOZ先生给我14楼的贴子得0分我没意见,但如果能给我得上那怕是10分,那我就心甘情愿地把MOZ先生称叔叔.
玩笑开完了,也该说句正经话,从MOZ在16楼的语言看,好像是有人逼着他非用宏代换不可一样.
关于17楼种子乐的话:“事实是有一些情况()表达式和EVALUATE()函数是替代不了宏替换的。”我有些不勘明白,因为我觉得()和Evaluate()完全可以代替&...,但即便是代替了,也不能说是宏替换被上述两个函数代替了,我认为上述两的函数也是宏替换的演变形式而已,此外,还要加上一个函数ExecScript(),也可以说是宏的一种形式。
我可能说得不对,只是个人的理解,所以,不怕别人批评!
我来回复