知道全局函数的名称,如何动态调用?

youngyey 2008-10-07 02:36:38
在项目pbl存在一个gf_function_1的全局函数,
假如我有一个字符串,
string s_fun_name

s_fun_name='gf_function_1'

此时我该如何动态的调用这个函数那?
...全文
193 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
AFIC 2008-10-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 youngyey 的回复:]
ds.describe 目前我只用过动态计算表达式,动态执行函数或者动态执行string语句,还没尝试,楼上请说的稍微详细点
[/Quote]

就是动态create一个计算域,它的表达式是你要调用的全局函数,包括参数
然后你取那个计算域的值不就行了。
Methodor 2008-10-10
  • 打赏
  • 举报
回复
9楼的是一种变通的方法,
一般pb不支持这种处理(其它很多语言支持类似宏替换功能),所以在pb中只能通过上面说的dw/ds的describe转换来实现,类似于宏替换,意义不大
sjq521521 2008-10-10
  • 打赏
  • 举报
回复
俺是来学习的。
youngyey 2008-10-10
  • 打赏
  • 举报
回复
昨晚已经尝试成功!AFIC和jdsnhan 说的都比较详细了,我就不帖我的示例了
感谢楼上各位!
散分了
youngyey 2008-10-09
  • 打赏
  • 举报
回复
多谢楼上几位,待我尝试成功后,来与大家分享!
kenshu 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kenshu 的回复:]

换个方式吧

window w_to_open
string ls_parm = 'your_parm'
string ls_window_name = 'w_2'//w_1 or w_3
OpenWithParm(w_to_open, ls_parm, ls_window_name)

具体的逻辑在你这好多个窗口的OPEN事件处理,处理完后关掉自己.

---------------------------------------------------

我从前年轻的时候,试过另一个方法,不过太麻烦了,不是一两句讲得完.
[/Quote]

顺便很不负责任地说一句,那个方法,您可以通过一本书,叫<游戏脚本高级编程>,看完它,动动手,就可以了.
jdsnhan 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 youngyey 的回复:]
ds.describe 目前我只用过动态计算表达式,动态执行函数或者动态执行string语句,还没尝试,楼上请说的稍微详细点
[/Quote]

describe能解析变量,而ds dw又支持全局函数,尝试一下就知道了。
youngyey 2008-10-08
  • 打赏
  • 举报
回复
NND,发现JAVA可以
youngyey 2008-10-08
  • 打赏
  • 举报
回复
简单翻看了一下《游戏脚本高级编程》,核心是runscript()
现在每个全局函数的代码我可以动态取出来,可以存到一个string中,
关键是PB能否支持动态的运行这个string?


多谢各位,顶都有分
rightyeah 2008-10-08
  • 打赏
  • 举报
回复
全局的函数很不好弄,基本上想不出什么办法来动态调用的。
简单的办法是创建自定义用户对象,不可见的那种,然后在里面定义函数(事件也可以),然后可以这样调用:
powerobject o //使用基本类型,可以存放所有类型的对象
o=create using 'u_my_object' //动态创建用户对象,爱用什么类型就用什么类型
o.dynamic uf_my_func() //动态联编的用法,编译时系统不检查函数的存在,用户必须保证运行时有这个函数,否则出错
o.dynamic event ue_my_event() //与上面相同,不过是变成调用事件了
o.triggerevent('ue_my_event2') //另一种调用事件的方式,这种方式的好处是不要求事件存在,不过会返回一个特殊值来说明调用失败
kenshu 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 youngyey 的回复:]
简单翻看了一下《游戏脚本高级编程》,核心是runscript()
现在每个全局函数的代码我可以动态取出来,可以存到一个string中,
关键是PB能否支持动态的运行这个string?


多谢各位,顶都有分
[/Quote]

我说的,"比较麻烦",是指自己写一个类PB的解释器(也就是发明自己的语言,别人叫PHP/ASP/JAVA SCRIPT,你就叫youngyey script).

说"很不负责任",就是这个原因.
youngyey 2008-10-08
  • 打赏
  • 举报
回复
了解了下pbni,感觉应该可行,可惜c++功底不行,可以尝试下
主要想让自己的系统更简洁,程序的运行不是那么死,能够在后台配置程序的运行,不然不会费这力气


AFIC ,如果有pbni更多的说明或示例,给我点,多谢
youngyey 2008-10-08
  • 打赏
  • 举报
回复
ds.describe 目前我只用过动态计算表达式,动态执行函数或者动态执行string语句,还没尝试,楼上请说的稍微详细点
AFIC 2008-10-08
  • 打赏
  • 举报
回复
pbni可以,个人认为用ds.describe是最方便的,也足够了。
kenshu 2008-10-07
  • 打赏
  • 举报
回复

换个方式吧

window w_to_open
string ls_parm = 'your_parm'
string ls_window_name = 'w_2'//w_1 or w_3
OpenWithParm(w_to_open, ls_parm, ls_window_name)

具体的逻辑在你这好多个窗口的OPEN事件处理,处理完后关掉自己.

---------------------------------------------------

我从前年轻的时候,试过另一个方法,不过太麻烦了,不是一两句讲得完.
jdsnhan 2008-10-07
  • 打赏
  • 举报
回复
不能。这个问题n长时间以前就讨论过,也讨论了n长时间。

可以考虑通过dynamic event 转换或着采用楼上的办法,ds.describe来实现。
pcwe2002 2008-10-07
  • 打赏
  • 举报
回复
没有办法根据名称调用,如果需要用动态的考虑用数据窗口的describe("evalute....")
lllyyymmm 2008-10-07
  • 打赏
  • 举报
回复
choose case
case
....
end choose
wfliu 2008-10-07
  • 打赏
  • 举报
回复
动态调用函数 ? 不明白你的意思,

是否可以写一个多态函数实现你的要求 ?
youngyey 2008-10-07
  • 打赏
  • 举报
回复
我不确定用哪一个全局函数,我希望能根据字符串s_fun_name的值,运行那个函数

不要用choose case,把所有的函数都列一遍
加载更多回复(1)

743

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧