我正在尝试在分形程序中做一些非常具体的事情隆起7X http://apophysis-7x.org/,使用的脚本语言是Pascal(该项目是用德尔福写的 https://svn.code.sf.net/p/apophysis7x/svn/trunk/).
我想做的事:
编写一个可以动态寻址某些变量的脚本。在程序中,我有所谓的变换,每个变换都有多种变体,可以通过插件添加新的变体,因此我不知道可能存在的所有名称。
变量的寻址方式如下:
Transform.Linear:=Sin(Pi*(FrameCount / FrameQuantity));
要更改的变化可能不是“线性”,而是十几个其他单词,例如“球面”或“Zcone”。
如果 eval 有效,我会假设解决方案是这样的:
VariationName:=User-Input;
eval('Transform.' + VariationName + ':=Sin(Pi*(FrameCount / FrameQuantity));')
据我所知,Pascal 中没有像 eval 或 exec 这样的东西(尝试过:Eval/eval/Exec/exec)。搜索其他网站和互联网也没有找到任何想法。
所以问题是如何使用用户输入来处理这些变量?明显地:
Transform.'User-Input':=Sin(Pi*(FrameCount / FrameQuantity));
不管用。因为我事先不知道所有名称,所以我也不能只使用数组或任何静态的东西。任何想法都将受到极大的欢迎。
你想做的事情叫做反射 http://en.wikipedia.org/wiki/Reflection_(computer_programming)。 Delphi 确实支持它(他们称之为扩展RTTI http://en.wikipedia.org/wiki/Run-time_type_information)。看看功能已发布属性 http://docwiki.embarcadero.com/Libraries/XE6/en/System.TypInfo.IsPublishedProp and 设置属性值 http://docwiki.embarcadero.com/Libraries/XE6/en/System.TypInfo.SetPropValue.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)