设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 888|回复: 3
打印 上一主题 下一主题

又一个”Proc.new “脚本

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

七仙女

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-1-15
帖子
559
跳转到指定楼层
1
发表于 2009-3-28 04:40:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-12-12
帖子
646
2
发表于 2009-3-28 07:07:55 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
54 小时
注册时间
2008-5-12
帖子
129
3
发表于 2009-3-28 08:55:34 | 只看该作者
其實Proc.new這個東西置頂帖就有介紹Orz
實際上,Proc就是一個臨時的方法,類似于def ... end。關鍵在于這個方法實例化了,可以儲存在一個變量當中。最大的作用就是可以用同一個名字指向不同的方法,或者在方法當中定義方法,比如:

a = Proc.new{p 1}
b = Proc.new{p 2}
c = 1
case c
when 1
d = a
when 2
d = c
end
d.call
def e
  @f = Proc.new{p "I am Proc"}
end
看的時候,把Proc前面的變量看作方法名,{}之間看成方法過程,||之間看成參數就可以了。
比如:
@m = Proc.new{|a,b,c| p a+b+c}
=>
def m(a,b,c)
  p a+b+c
end
以上兩者幾乎是一樣的。
版主对此帖的评论:『楼主说会回来认可你的答案,请稍等一会儿...』,积分『-0』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
你是個好人>////<
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
4
发表于 2009-3-28 11:51:34 | 只看该作者
Ruby 的 Proc 机制上面 Quarcy 和我在您另一贴中都说得很清楚了~
这里的 Proc 就是一个访问属于另一个作用域的变量的例子
@message_waiting 是属于 Interpreter 的一个成员(实例变量),在类的外部默认是不可访问的,但将赋值语句记录到 Proc 代码块中,就能在类的外部通过调用 Proc 来执行给这个实例变量赋值的操作。尽管当前作用域已经不知道(忘了)这个变量为何物了,但 Proc 中却记录得清清楚楚~
这也是与面向对象编程思路中类的严谨封装性背道而驰的一种机制,就好像 C++ 中的友元一样~
在 Window_Message 刷新时,按下确定后调用 terminate_message,就调用了这个 Proc,修改地图上的仅有的一个 Interpreter 实例的 @message_waiting 这个成员变量为 false,之后在 Interpreter 的 update 刷新时判断 @message_waiting 不为 true,对话框的待机已经结束,于是不再直接返回 update,开始进行后面的操作
版主对此帖的认可:『正确解答,补上悬赏积分,感激你的热情帮助...』,积分『+350』。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-16 20:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表