Rev 5766 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2071 | zjchen | 1 | !read tabletheme |
2 | <h4>变量的定义与替换</h4> |
||
3 | |||
17228 | bpr | 4 | Wims的变量只有一种类型: 它们都是字符串变量. |
2071 | zjchen | 5 | 对变量的赋值是通过变量命令 |
4564 | bpr | 6 | $(ref1)cmdlist_eval_&cmd_choose=all$(ref2)cmdlist_eval_">!eval</a> 实现的. |
2071 | zjchen | 7 | <p> |
8 | 变量的定义或改变可由变量处理文件完成, 或使用命令 |
||
4564 | bpr | 9 | $(ref1)cmdlist_let_&cmd_choose=all$(ref2)cmdlist_let_">!let</a> 与 |
2071 | zjchen | 10 | $(ref1)cmdlist_default_&cmd_choose=all$(ref2)cmdlist_default_>!default</a>. |
11 | <p> |
||
17228 | bpr | 12 | 变量名可以使用任何英文字母、数字以及下划线 $(emph)_$emphend. |
2071 | zjchen | 13 | 对于变量名的长度以及变量值的长度都有限制. |
14 | (由服务器的配置确定.) |
||
15 | <p> |
||
16 | 在变量处理文件或phtml文件的任何地方(甚至在变量定义命令行的名称栏) |
||
17 | 都可以进行变量替换. 以字符 $emph$$$emphend 起首的字母串被认为是变量名, |
||
18 | 而且在包含它的命令行被处理时被替换成它的值. |
||
19 | <p> |
||
20 | 变量替换的特殊规则: |
||
21 | <ul> |
||
22 | <li>如果字符 $emph$$$emphend 后接空格, 将被舍弃. |
||
4051 | bpr | 23 | </li><li>字符串 $emph$$$$$emphend 被替换成单个 $emph$$$emphend. |
17228 | bpr | 24 | </li><li>如果字符 $emph$$$emphend 后接左括号 $emph($emphend, |
2071 | zjchen | 25 | 那么会找到匹配的右括号 $emph)$emphend, 括号内的内容将被替换. |
26 | 替换结果将成为变量名, 而且最后结果是后一变量的值. |
||
27 | 这就允许嵌套的替换, 对于变量后接字符数字串也有同样替换. |
||
17228 | bpr | 28 | <br>例: 如果变量 $(emph)i$emphend 取值 $(emph)3$emphend, |
2071 | zjchen | 29 | 变量 $(emph)alpha3beta$emphend 将取值 $(emph)pi$emphend, |
30 | 字符串<pre> |
||
31 | 3*$$(alpha$$(i)beta)*x</pre>经替换后变成<pre> |
||
32 | 3*pi*x.</pre> |
||
33 | <p> |
||
34 | 数组的赋值: 如果变量 $(emph)l$emphend 含有以逗号分隔的表 |
||
35 | $(emph)a,b,c,d,e$emphend, 则经替换后, 字符串 |
||
36 | <tt>$$(i[3])</tt> 取值 <tt>c</tt>, 且 |
||
37 | <tt>$$(i[2 to 4])</tt> 给出 <tt>b,c,d</tt>, 等等. |
||
38 | <p> |
||
39 | 也可给2维数组赋值: 如果 |
||
4051 | bpr | 40 | <pre>$$M=x,y,z;a,b,c</pre> |
2071 | zjchen | 41 | (一个2x3矩阵), 则 |
4051 | bpr | 42 | <pre> $$(M[1;3,2])=z,y </pre> |
43 | </li><li>如果字符 $emph$$$emphend 后接左方括号 |
||
2071 | zjchen | 44 | $emph[$emphend, 则先找到匹配的 $emph]$emphend, 括号内的内容被替换, |
45 | 再被赋予实数值, 其精度由 $emph print_precision$emphend 确定. |
||
17228 | bpr | 46 | 所得的值前面加上 $emph$$$emphend 后代替原来的美元号加一对方括号及其中的所有内容.<br> |
2071 | zjchen | 47 | 它可用于作为数组的下标. |
17228 | bpr | 48 | <br>例: 若变量 $(emph)i$emphend 取值 $(emph)3$emphend, |
49 | 变量<br> |
||
50 | $(emph)a1$emphend 的值是 $(emph)3$emphend, <br> |
||
51 | $(emph)a2$emphend 的值是 $(emph)pi$emphend, <br> |
||
2071 | zjchen | 52 | 则经过替换后, 串<pre> |
53 | $$(a$$[$$i-1])*x+$$(a$$[$$i-2])</pre>成为<pre> |
||
54 | pi*x+3.</pre> |
||
4051 | bpr | 55 | </li><li>如果经替换后变量的值仍含有字符 |
2071 | zjchen | 56 | $emph$$$emphend, 那么继续进行替换, 直至没有替换可作为止. |
17228 | bpr | 57 | 服务器对嵌套替换的层次有个上限; |
2071 | zjchen | 58 | 无限嵌套的替换会因超过这个限制而以出错信息结束. |
4051 | bpr | 59 | </li> |
2071 | zjchen | 60 | </ul> |
61 | |||
17228 | bpr | 62 | <hr><h4>被保留的变量名</h4> |
2071 | zjchen | 63 | |
64 | 以下名称有特殊意义, 不能用在任何模块的内部名称里. |
||
65 | |||
66 | <ul> |
||
67 | <li>不要使用全由数字组成的变量名. |
||
68 | 这将留作以后系统的发展使用. |
||
4051 | bpr | 69 | </li><li>变量名 |
2071 | zjchen | 70 | !for i in cmd,module,session,lang,special_parm,user,useropts,worksheet |
71 | $emph$i$emphend, |
||
72 | !next i |
||
73 | 用于传送用户的特殊参数. 模块的变量处理文件以及phtml文件可以读这些变量, |
||
17228 | bpr | 74 | 但不能给它们设置值.<br> |
2071 | zjchen | 75 | 这些变量的意义参见 $emph$title_structure$emphend. |
17228 | bpr | 76 | </li><li>变量 $emph no_name$emphend 有特殊用途: <br> |
2071 | zjchen | 77 | 用户询问串里的无名参数(例如把图像坐标传送给http服务器时)就存放在这个变量里. |
78 | 因此它不能用于其它目的. |
||
4051 | bpr | 79 | </li><li>所有以 $emph wims_$emphend 起首的名字都对wims服务器有特殊含义. |
2071 | zjchen | 80 | 仅当它们被赋予特殊含义时, 模块才能对它们读或写. |
4051 | bpr | 81 | </li><li>以 $emph m_$emphend 起首的变量名保留作为内嵌数学符号用. |
2071 | zjchen | 82 | 模块程序设计者可以对它们重新定义, 但原来的定义就消失了. |
4051 | bpr | 83 | </li><li>变量 $emph module_dir$emphend 的值已被预设为当前模块的目录 |
2071 | zjchen | 84 | (相对于服务器的公开网页主目录). 它的值通常是 |
85 | $emph $$module_dir=module/$$module $emphend |
||
86 | (但可因安装时的配置而改变). |
||
4051 | bpr | 87 | </li><li>以 $emph module_$emphend 起首的变量名有特殊含义: |
2071 | zjchen | 88 | 它们用于储存模块的INDEX文件所定义的变量. 目前已使用的变量有: |
89 | |||
90 | $table_header |
||
91 | $table_tr<th>变量</th><th>意义</th></tr> |
||
4051 | bpr | 92 | $table_tr<td>$emph module_title$emphend</td><td>模块名称</td></tr> |
93 | $table_tr<td>$emph module_description$emphend</td><td>模块的简短说明</td></tr> |
||
94 | $table_tr<td>$emph module_author$emphend</td><td>模块作者名</td></tr> |
||
95 | $table_tr<td>$emph module_address$emphend</td><td>(主要)作者的电邮地址</td></tr> |
||
96 | $table_tr<td>$emph module_maintainer$emphend</td><td>当前维护者姓名</td></tr> |
||
97 | $table_tr<td>$emph module_maintainer_address$emphend</td><td>维护者电邮地址</td></tr> |
||
98 | $table_tr<td>$emph module_copyright$emphend</td><td>模块的版权</td></tr> |
||
99 | $table_tr<td>$emph module_version$emphend</td><td>模块的当前版本</td></tr> |
||
17228 | bpr | 100 | $table_tr<td>$emph module_wims_version$emphend</td><td>为执行此模块所需的<br> |
4051 | bpr | 101 | 最低wims版本</td></tr> |
102 | $table_tr<td>$emph module_language$emphend</td><td>模块语言(cn, en, fr, es, 等 ...)</td></tr> |
||
17228 | bpr | 103 | $table_tr<td>$emph module_category$emphend</td><td>模块的范畴<br> |
4051 | bpr | 104 | (exercise, tool, course, pedia, recreation, adm, other)</td></tr> |
105 | $table_tr<td>$emph module_level$emphend</td><td>模块的程度</td></tr> |
||
106 | $table_tr<td>$emph module_domain$emphend</td><td>algebra, analysis, geometry, ...</td></tr> |
||
107 | $table_tr<td>$emph module_keywords$emphend</td><td>关键词, 用于html的头部</td></tr> |
||
108 | $table_tr<td>$emph module_scoring$emphend</td><td>= yes (若模块按wims标准给分)</td></tr> |
||
109 | $table_tr<td>$emph module_data$emphend</td><td>数据模块地址</td></tr> |
||
110 | $table_end |
||
17228 | bpr | 111 | 此外, 变量 $emph module_has_intro$emphend, |
2071 | zjchen | 112 | $emph module_has_help$emphend 以及 |
113 | $emph module_has_about$emphend |
||
114 | 取值 "yes" 意为模块目录里含有相应的 .phtml 文件. |
||
115 | 这些变量用于命令 <tt>!homeref</tt> 中. |
||
4051 | bpr | 116 | </li><li>以 $emph httpd_$emphend 起首的变量是httpd设置的环境变量, |
2071 | zjchen | 117 | 可供wims模块读出. 例如环境变量 $emph REMOTE_HOST$emphend 在wims内部成为 |
17228 | bpr | 118 | $emph httpd_REMOTE_HOST$emphend.<br> |
2071 | zjchen | 119 | 这类变量的详情请参看httpd协议的说明. |
17228 | bpr | 120 | </li><li>以 $emph ins_$emphend, $emph insplot_$emphend, $emph instex_$emphend |
121 | 起首的变量名都有与插入引擎有关的特殊含义. |
||
2071 | zjchen | 122 | 只有当它们被指定特殊意义时, 模块才能对它们读或写. |
4051 | bpr | 123 | </li><li>如果你的模块使用外部软件包(例如 $emph pari$emphend), |
2071 | zjchen | 124 | 那么以与此外部包的接口名后接 $emph _$emphend 的变量名将有特殊含义, |
125 | 不应用作其它用途. |
||
126 | </ul> |
||
127 |