社区
VFP
帖子详情
关于变量声明的疑惑
都市夜猫
2009-06-26 12:49:36
加精
经常看到一些高手在所写代码中声明变量时使用如下格式:
PRIVATE Var1, Var2
LOCAL Var1, Var2
为何要同时声明两种不同类型的同名变量?有什么好处?
我知道 Private 可用来声明并隐藏高层模块中的变量,Local 用来声明局部变量
主要是为何要使用 Private 声明?
...全文
520
73
打赏
收藏
关于变量声明的疑惑
经常看到一些高手在所写代码中声明变量时使用如下格式: PRIVATE Var1, Var2 LOCAL Var1, Var2 为何要同时声明两种不同类型的同名变量?有什么好处? 我知道 Private 可用来声明并隐藏高层模块中的变量,Local 用来声明局部变量 主要是为何要使用 Private 声明?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
73 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xcntime
2012-02-28
打赏
举报
回复
70多层楼的回答,看了一遍,貌似还是不明晰啊
esnake
2011-02-14
打赏
举报
回复
我最关心的是,能不能强制变量必需声明?
狂龙骄子
2010-03-19
打赏
举报
回复
[Quote=引用 63 楼 dkfdtf 的回复:]
刚才看到狐狸天堂的 xinjie(都认识吧)留言,原来 myf1 上很早就有人提出过这个问题
从讨论的结果来看,问题原由和我猜想的基本一致
此情况都出自 on ... cmmmand 这类语句
1. on selection bar/pad/... 这类语句
以前在 foxpro for dos 中只能这样建菜单,现在 vfp 在 Windows 环境下有大量好用的第三方 Active……
[/Quote]
第1点:
1、支持用 DO p_UserProc 方式(俾人使用此方法4年有余:不但能减少代码冗余,使用、修改也很方便);
2、通过用 Public 定义的变量,来控制 某菜单(项) 的 激活/失效,也是很不错的选择(虽没有 VC++中 对 ID 的 控制方便,但也是首选);
3、05年从 DOS 转入 VF x.0 系列后,都很少使用 Private 定义变量(都用Local、Public)。
love2008cn
2010-01-27
打赏
举报
回复
对于新狐上路兄举的例子是可以解释的,测试如下
lnIndex = 100
aa()
?lnIndex &&显示菜单项 1 或2 或100
MESSAGEBOX显示200
再看
LOCAL lnIndex
lnIndex = 100
aa()
?lnIndex &&显示100
MESSAGEBOX显示菜单项 1 或2 或200
可以看到在第一个例子中菜单项的返回值被高一级作用域的变量给勾走了:)
说明On Selection的返回是没有考虑优先级的
TX_HD
2010-01-04
打赏
举报
回复
[Quote=引用 38 楼 yrt888 的回复:]
感觉就是好像用力关门,听到平常熟识的关门声音(LOCAL val1,val2 ),为了心安理得,还是摇了几下门(Private val1,val2 ),看看关好了没有!
[/Quote]
我菜菜地以为这是正解~
捧剑者
2010-01-03
打赏
举报
回复
hehe
紫寒尺
2009-09-11
打赏
举报
回复
学习了~~
lj_lt
2009-06-29
打赏
举报
回复
hehe
yrt888
2009-06-28
打赏
举报
回复
难道看不明!
ydks_qz
2009-06-28
打赏
举报
回复
什么乱七八糟的~~~
都市夜猫
2009-06-27
打赏
举报
回复
[Quote=引用 51 楼 ydks_qz 的回复:]
最小再现环境如下:
...
运行 a .prg,结果很是令人吃惊甚至可以用诡异来形容 ...
[/Quote]
非常非常的感谢新狐上路兄弟的重现示例!!!
试了一下,确实感到十分蹊跷,难道是一个从未听说过的 vfp.bug?
这个重现中的情况似乎违反了 vfp 中同时存在 Local 和 Private 两个同名变量时 Local 优先的原则
需要再分析一下
再次感谢新狐上路兄弟!
Ak混子
2009-06-27
打赏
举报
回复
不会,等高手,看看有什么好的办法
十豆三
2009-06-27
打赏
举报
回复
51 楼 ydks_qz 的解释验证我 40 楼的理解。
所以我还是认为这样写是规范的,合理的
TO:dkfdtf
你 48 楼的例子,只能说明后来的程序员修改不小心,并不是同时使用不合理。因为如果后来的程序员用了其中一个,虽然可能不报错,但可能造成的结果更不可思议(结果是错的,而不是程序报错),甚至更不好查错。
yjrryyx
2009-06-27
打赏
举报
回复
青蛙跳水:
yjrryyx
2009-06-27
打赏
举报
回复
青蛙跳水:
http://p.blog.csdn.net/images/p_blog_csdn_net/yjrryyx/EntryImages/20090627/2e6fa7388b6410e4d56225ff.jpg
cbl518
2009-06-27
打赏
举报
回复
在子程序Z1中,直接给p001=2,其结果在 Z2 子程序Z1中,p001 变量显示为 2
CLEAR
p001=1
Z1()
?"主程序的值:"+STR(p001)
RELEASE p001
FUNCTION Z1
PRIVATE p001
p001=2
Z2()
FUNCTION Z2
?IIF(VARTYPE(p001)="U","p001变量不存在!","Z2的值:"+STR(p001))
cbl518
2009-06-27
打赏
举报
回复
在子程序Z1中,使用了 LOcaL 语句,其结果在 Z2 子程序Z1中,p001 变量不存在!
CLEAR
p001=1
Z1()
?"主程序的值:"+STR(p001)
RELEASE p001
FUNCTION Z1
PRIVATE p001
LOCAL p001
p001=2
Z2()
FUNCTION Z2
?IIF(VARTYPE(p001)="U","p001变量不存在!","Z2的值:"+STR(p001))
cbl518
2009-06-27
打赏
举报
回复
PRIVATE
不但隐藏了,上级程序中同名的内存变量,而且对其,调用的下级子程序时,依然隐藏。
p001=1
Z1()
?p001
RELEASE p001
FUNCTION Z1
PRIVATE p001
p001=2
Z2()
FUNCTION Z2
?IIF(VARTYPE(p001)="U","p001变量不存在!",p001)
都市夜猫
2009-06-27
打赏
举报
回复
刚才看到狐狸天堂的 xinjie(都认识吧)留言,原来 myf1 上很早就有人提出过这个问题
从讨论的结果来看,问题原由和我猜想的基本一致
此情况都出自 on ...
cmmmand
这类语句
1. on selection bar/pad/... 这类语句
以前在 foxpro for dos 中只能这样建菜单,现在 vfp 在 Windows 环境下有大量好用的第三方 ActiveX 可用,我一直
用 CodeJock 的 Xtreme SuitePro 来做菜单,任务面板,工具条,状态栏,一个 ocx 全部搞掂。
一定要用的话,不要直接在
command
处写赋值语句,要调用一个函数或 do 语句,vfp 的帮助中也是这样建议的。
2. on key label
用 fpd 时大量使用,在 browse 窗口中按键执行类似 Windows 工具栏按钮的功能,vfp 中不再使用
3. on error
自从 vfp 有了 try ...catch ... endtry 结构语句后,不再使用 on error
所以对我来说,是否同时声明 Private 和 Local 不再重要
总算搞清楚这个问题了
感谢前面各位的参与,特别是 ydks_qz, xinjie 两位高手的指点
也要感谢豆三版主推荐此贴,让更多的人了解这颗隐藏的炸弹
ertyqw
2009-06-27
打赏
举报
回复
up
加载更多回复(52)
03Go语言实战之
变量
与常量
课程介绍了go语言当中的
变量
和常量使用方法,包含了
变量
的
声明
方式、简短
变量
声明
、
变量
的作用域、指针、按值传递和按址传递的区别、常量介绍
go-短
变量
声明
文章目录背景例子总结 背景 记录使用过程中短
变量
声明
的
疑惑
例子 package main import "fmt" var a int //a:= 1 函数外部不允许短
变量
声明
func main() { fmt.Printf("全局
变量
地址:%p, 值%#v\n", &a, a)//全局
变量
地址:0x118e210, 值0 a := 1 fmt.Printf("函数内短
变量
声明
后地址:%p, 值%#v\n", &a, a)//函数内短
变量
声明
后地址:0xc0000180a0,
Python必学知识:
变量
的
声明
在Python语言中,
声明
变量
的同时需要为其赋值,毕竟不代表任何值的
变量
毫无意义,Python语言中也不允许有这样的
变量
。下面的代码
声明
了多个
变量
,这些
变量
的数据类型包括整数、字符串、布尔和浮点数。等号(=)左侧是
变量
名,右侧是
变量
值,赋完值后,Python编译器会自动识别
变量
的类型。例如,value315是一个合法的
变量
名,而315value是错误的
变量
名。类似于“张三”、“李四”、“王二麻子”一样的人名,便于记忆。好了,今天的分享就差不多到这里了!
C#
变量
声明
与打印
在C#编程中,我们经常需要
声明
不同类型的
变量
,并给它们分配值。然后,我们可能需要打印这些
变量
的值以进行调试或输出结果。在本文中,我将向您展示如何
声明
不同类型的
变量
,为它们分配值,并使用C#控制台应用程序打印它们的值。希望本文能够帮助您理解如何
声明
不同类型的
变量
,并打印它们的值。除了基本的数据类型,我们还可以
声明
和分配其他自定义类型的
变量
。通过以上示例,我们学习了如何
声明
不同类型的
变量
,并给它们分配值。接下来,让我们看一下如何
声明
和分配值给浮点型
变量
。首先,让我们来看一下如何
声明
和分配值给整型
变量
。
JavaScript 全局
变量
与局部
变量
的关系及
声明
方式
对于 JavaScript 中的全局
变量
和局部
变量
,分为隐式
声明
和显示
声明
。 全局
变量
1.使用 var 关键字在函数外部
声明
的
变量
,为全局
变量
(显示
声明
) 2.在函数内部,没有使用 var
声明
的
变量
,也为全局
变量
(隐式
声明
) 3.使用 window 全局对象来
声明
的
变量
,也为全局
变量
`window.a = 1;`(显示
声明
) 局部
变量
1.在函数内部使用 var 关键字
声明
的
变量
,为局部变...
VFP
2,722
社区成员
29,108
社区内容
发帖
与我相关
我的任务
VFP
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
复制链接
扫一扫
分享
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章