⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000004.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 5 页
字号:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upvar&nbsp;#0&nbsp;$obj_name&nbsp;arr&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;arr(color)&nbsp;$color&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;proc&nbsp;dispatch&nbsp;{obj_name&nbsp;command&nbsp;args}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;{&nbsp;$command&nbsp;==&nbsp;&quot;get_color&quot;&nbsp;}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[get_color&nbsp;$obj_name]&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;elseif&nbsp;{&nbsp;$command&nbsp;==&nbsp;&quot;set_color&quot;&nbsp;}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set_color&nbsp;$obj_name&nbsp;[lindex&nbsp;$args&nbsp;0]&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;&quot;Error:&nbsp;Unknown&nbsp;command&nbsp;$command&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;proc&nbsp;apple&nbsp;{args}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;name&nbsp;$args&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc&nbsp;$name&nbsp;{command&nbsp;args}&nbsp;\&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;return&nbsp;\[eval&nbsp;dispatch&nbsp;$name&nbsp;\$command&nbsp;\$args\]&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upvar&nbsp;#0&nbsp;$name&nbsp;arr&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;arr(color)&nbsp;green&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;proc&nbsp;delete_apple&nbsp;{args}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;name&nbsp;$args&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upvar&nbsp;#0&nbsp;$name&nbsp;arr&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unset&nbsp;arr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;#&nbsp;Deletes&nbsp;the&nbsp;object's&nbsp;data&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rename&nbsp;$name&nbsp;{}&nbsp;&nbsp;;&nbsp;#&nbsp;Deletes&nbsp;the&nbsp;object&nbsp;command&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;#&nbsp;Note&nbsp;the&nbsp;advantage&nbsp;of&nbsp;using&nbsp;an&nbsp;array&nbsp;per&nbsp;object:&nbsp;<BR>&nbsp;&nbsp;&nbsp;#&nbsp;'delete_apple'&nbsp;can&nbsp;just&nbsp;'unset&nbsp;arr'&nbsp;instead&nbsp;of&nbsp;having&nbsp;to&nbsp;<BR>&nbsp;&nbsp;&nbsp;#&nbsp;remove&nbsp;one&nbsp;entry&nbsp;in&nbsp;three&nbsp;different&nbsp;arrays.&nbsp;<BR>&nbsp;<BR>A&nbsp;third&nbsp;alternative&nbsp;is&nbsp;to&nbsp;use&nbsp;only&nbsp;a&nbsp;single,&nbsp;global&nbsp;array,&nbsp;indexed&nbsp;by&nbsp;&nbsp;<BR>the&nbsp;object&nbsp;name&nbsp;and&nbsp;the&nbsp;attribute&nbsp;name.&nbsp;To&nbsp;find&nbsp;the&nbsp;color&nbsp;of&nbsp;apple&nbsp;a1,&nbsp;&nbsp;<BR>you&nbsp;would&nbsp;have&nbsp;to&nbsp;access&nbsp;$attributes(a1,color).&nbsp;The&nbsp;advantage&nbsp;of&nbsp;&nbsp;<BR>having&nbsp;only&nbsp;a&nbsp;single&nbsp;array&nbsp;to&nbsp;maintain,&nbsp;has&nbsp;to&nbsp;be&nbsp;weighed&nbsp;off&nbsp;against&nbsp;&nbsp;<BR>the&nbsp;disadvantage&nbsp;of&nbsp;having&nbsp;to&nbsp;delete&nbsp;several&nbsp;array&nbsp;entries&nbsp;in&nbsp;the&nbsp;&nbsp;<BR>delete_apple&nbsp;procedure.&nbsp;&nbsp;<BR>&nbsp;<BR>Configuring&nbsp;the&nbsp;attributes&nbsp;<BR>Another&nbsp;improvement&nbsp;that&nbsp;we&nbsp;can&nbsp;make,&nbsp;is&nbsp;to&nbsp;get&nbsp;rid&nbsp;of&nbsp;all&nbsp;those&nbsp;&nbsp;<BR>annoying&nbsp;get/set&nbsp;methods.&nbsp;We&nbsp;do&nbsp;this&nbsp;by&nbsp;introducing&nbsp;two&nbsp;new&nbsp;methods&nbsp;&nbsp;<BR>for&nbsp;each&nbsp;class,&nbsp;called&nbsp;configure&nbsp;and&nbsp;cget.&nbsp;The&nbsp;first&nbsp;gives&nbsp;new&nbsp;values&nbsp;to&nbsp;<BR>&nbsp;some&nbsp;attributes,&nbsp;the&nbsp;second&nbsp;reads&nbsp;the&nbsp;value&nbsp;of&nbsp;an&nbsp;attribute.&nbsp;We&nbsp;can&nbsp;&nbsp;<BR>implement&nbsp;these&nbsp;procedures&nbsp;for&nbsp;the&nbsp;apple&nbsp;class&nbsp;as&nbsp;follows:&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;proc&nbsp;dispatch&nbsp;{obj_name&nbsp;command&nbsp;args}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upvar&nbsp;#0&nbsp;$obj_name&nbsp;arr&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;{&nbsp;$command&nbsp;==&nbsp;&quot;configure&quot;&nbsp;||&nbsp;$command&nbsp;==&nbsp;&quot;config&quot;&nbsp;}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;{opt&nbsp;val}&nbsp;$args&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;{&nbsp;![regexp&nbsp;{^-(.+)}&nbsp;$opt&nbsp;dummy&nbsp;small_opt]&nbsp;}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;&quot;Wrong&nbsp;option&nbsp;name&nbsp;$opt&nbsp;(ignored)&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;arr($small_opt)&nbsp;$val&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;elseif&nbsp;{&nbsp;$command&nbsp;==&nbsp;&quot;cget&quot;&nbsp;}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;opt&nbsp;[lindex&nbsp;$args&nbsp;0]&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;{&nbsp;![regexp&nbsp;{^-(.+)}&nbsp;$opt&nbsp;dummy&nbsp;small_opt]&nbsp;}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;&quot;Wrong&nbsp;or&nbsp;missing&nbsp;option&nbsp;name&nbsp;$opt&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&quot;&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$arr($small_opt)&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;elseif&nbsp;{&nbsp;$command&nbsp;==&nbsp;&quot;byte&quot;&nbsp;}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;&quot;Taking&nbsp;a&nbsp;byte&nbsp;from&nbsp;apple&nbsp;$obj_name&nbsp;($arr(size))&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incr&nbsp;arr(size)&nbsp;-1&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;{&nbsp;$arr(size)&nbsp;&lt;=&nbsp;0&nbsp;}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;&quot;Apple&nbsp;$obj_name&nbsp;now&nbsp;completely&nbsp;eaten!&nbsp;&nbsp;Deleting&nbsp;it...&nbsp;<BR>&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete_apple&nbsp;$obj_name&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;&quot;Error:&nbsp;Unknown&nbsp;command&nbsp;$command&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;#&nbsp;We&nbsp;also&nbsp;change&nbsp;the&nbsp;implementation&nbsp;of&nbsp;the&nbsp;&quot;constructor&quot;,&nbsp;<BR>&nbsp;&nbsp;&nbsp;#&nbsp;so&nbsp;that&nbsp;it&nbsp;accepts&nbsp;initializing&nbsp;values&nbsp;for&nbsp;the&nbsp;attributes.&nbsp;<BR>&nbsp;&nbsp;&nbsp;proc&nbsp;apple&nbsp;{name&nbsp;args}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc&nbsp;$name&nbsp;{command&nbsp;args}&nbsp;\&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;return&nbsp;\[eval&nbsp;dispatch&nbsp;$name&nbsp;\$command&nbsp;\$args\]&quot;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;First&nbsp;set&nbsp;some&nbsp;defaults&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upvar&nbsp;#0&nbsp;$name&nbsp;arr&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;arr(color)&nbsp;green&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;arr(size)&nbsp;5&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;arr(price)&nbsp;10&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Then&nbsp;possibly&nbsp;override&nbsp;those&nbsp;defaults&nbsp;with&nbsp;user-supplied&nbsp;&nbsp;<BR>values&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;{&nbsp;[llength&nbsp;$args]&nbsp;&gt;&nbsp;0&nbsp;}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval&nbsp;$name&nbsp;configure&nbsp;$args&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>Attribute&nbsp;access&nbsp;now&nbsp;looks&nbsp;exactly&nbsp;as&nbsp;it&nbsp;does&nbsp;for&nbsp;Tk&nbsp;widgets.&nbsp;Compare&nbsp;&nbsp;<BR>these&nbsp;two&nbsp;fragments&nbsp;of&nbsp;code:&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;button&nbsp;.b&nbsp;-text&nbsp;&quot;Hello&quot;&nbsp;-command&nbsp;&quot;puts&nbsp;world&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;.b&nbsp;configure&nbsp;-command&nbsp;&quot;exit&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;set&nbsp;textvar&nbsp;[.b&nbsp;cget&nbsp;-text]&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;apple&nbsp;a&nbsp;-color&nbsp;red&nbsp;-size&nbsp;5&nbsp;<BR>&nbsp;&nbsp;&nbsp;a&nbsp;configure&nbsp;-size&nbsp;6&nbsp;<BR>&nbsp;&nbsp;&nbsp;set&nbsp;clr&nbsp;[a&nbsp;cget&nbsp;-color]&nbsp;<BR>&nbsp;<BR>Some&nbsp;widget&nbsp;libraries&nbsp;that&nbsp;are&nbsp;written&nbsp;in&nbsp;pure&nbsp;TCL,&nbsp;use&nbsp;object&nbsp;&nbsp;<BR>commands&nbsp;and&nbsp;configure/cget&nbsp;methods&nbsp;to&nbsp;make&nbsp;the&nbsp;widget&nbsp;syntax&nbsp;the&nbsp;same&nbsp;&nbsp;<BR>as&nbsp;in&nbsp;Tk.&nbsp;But&nbsp;obviously,&nbsp;this&nbsp;technique&nbsp;also&nbsp;works&nbsp;for&nbsp;other&nbsp;kinds&nbsp;of&nbsp;&nbsp;<BR>objects.&nbsp;&nbsp;<BR>&nbsp;<BR>Object&nbsp;persistence&nbsp;<BR>We&nbsp;will&nbsp;now&nbsp;cover&nbsp;a&nbsp;more&nbsp;exotic&nbsp;topic:&nbsp;object&nbsp;persistence.&nbsp;This&nbsp;means&nbsp;&nbsp;<BR>that&nbsp;you&nbsp;can&nbsp;save&nbsp;an&nbsp;object&nbsp;on&nbsp;disk,&nbsp;and&nbsp;recover&nbsp;it&nbsp;later,&nbsp;in&nbsp;the&nbsp;same&nbsp;&nbsp;<BR>or&nbsp;in&nbsp;another&nbsp;application,&nbsp;even&nbsp;in&nbsp;another&nbsp;process.&nbsp;The&nbsp;recovered&nbsp;object&nbsp;<BR>&nbsp;has&nbsp;exactly&nbsp;the&nbsp;same&nbsp;attributes&nbsp;as&nbsp;the&nbsp;one&nbsp;you&nbsp;saved.&nbsp;&nbsp;<BR>&nbsp;<BR>In&nbsp;languages&nbsp;such&nbsp;as&nbsp;C++,&nbsp;object&nbsp;persistence&nbsp;is&nbsp;quite&nbsp;a&nbsp;challenge&nbsp;&nbsp;<BR>(especially&nbsp;if&nbsp;you&nbsp;want&nbsp;to&nbsp;save&nbsp;an&nbsp;object&nbsp;on&nbsp;one&nbsp;platform,&nbsp;and&nbsp;recover&nbsp;&nbsp;<BR>it&nbsp;on&nbsp;another&nbsp;platform&nbsp;with&nbsp;different&nbsp;endianness&nbsp;or&nbsp;with&nbsp;a&nbsp;different&nbsp;&nbsp;<BR>compiler).&nbsp;But&nbsp;the&nbsp;flexibility&nbsp;of&nbsp;TCL&nbsp;makes&nbsp;object&nbsp;persistence&nbsp;a&nbsp;piece&nbsp;&nbsp;<BR>of&nbsp;cake!&nbsp;We&nbsp;will&nbsp;save&nbsp;our&nbsp;objects&nbsp;in&nbsp;a&nbsp;text&nbsp;file,&nbsp;then&nbsp;treat&nbsp;that&nbsp;file&nbsp;&nbsp;<BR>as&nbsp;an&nbsp;Active&nbsp;File&nbsp;to&nbsp;read&nbsp;the&nbsp;objects&nbsp;back&nbsp;(Read&nbsp;more&nbsp;about&nbsp;the&nbsp;Active&nbsp;&nbsp;<BR>File&nbsp;pattern&nbsp;in&nbsp;my&nbsp;paper&nbsp;on&nbsp;TCL&nbsp;file&nbsp;formats,&nbsp;or&nbsp;on&nbsp;&gt;&gt;&nbsp;Nat&nbsp;Pryce's&nbsp;web&nbsp;&nbsp;<BR>site).&nbsp;&nbsp;<BR>&nbsp;<BR>We&nbsp;only&nbsp;need&nbsp;a&nbsp;single&nbsp;Tcl&nbsp;procedure&nbsp;(!)&nbsp;to&nbsp;give&nbsp;objects&nbsp;of&nbsp;all&nbsp;classes&nbsp;&nbsp;<BR>the&nbsp;ability&nbsp;to&nbsp;make&nbsp;themselves&nbsp;persistent:&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;example8/apples.tcl&nbsp;<BR>&nbsp;&nbsp;&nbsp;proc&nbsp;write_objects&nbsp;{classname&nbsp;args}&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;name&nbsp;$args&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upvar&nbsp;#0&nbsp;$name&nbsp;arr&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;&quot;$classname&nbsp;$name&nbsp;\\&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;attr&nbsp;[array&nbsp;names&nbsp;arr]&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;&quot;&nbsp;&nbsp;&nbsp;-$attr&nbsp;$arr($attr)&nbsp;\\&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;&quot;&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>The&nbsp;idea&nbsp;is&nbsp;that&nbsp;this&nbsp;procedure&nbsp;is&nbsp;invoked&nbsp;as&nbsp;follows:&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;write_objects&nbsp;apple&nbsp;a1&nbsp;a2&nbsp;a3&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -