Project1

标题: 求教Proc和Thread [打印本页]

作者: heiwang1997    时间: 2014-3-22 21:53
标题: 求教Proc和Thread
本帖最后由 heiwang1997 于 2014-3-22 21:55 编辑

XP默认脚本中,解释器3中有这样的代码:
RUBY 代码复制
  1. $game_temp.message_proc = Proc.new { @message_waiting = false }

求大神指教这是什么意思!

另外,RGSS高版本中还提供了Thread类,允许处理多进程,和这个Proc有什么区别?其critical属性是指什么?
还有还有,在程序中这样写对吗,会造成内存浪费什么的吗?
RUBY 代码复制
  1. class Scene_XXX
  2.   def main
  3.     # 创建一个线程
  4.     @thre ad = Thread.new{loop do;Graphics.update;Input.update;end}
  5.     # 渐变
  6.     Graphics.transition
  7.     loop do
  8.       # 无限循环
  9.       break if false
  10.     end
  11.     Graphics.freeze
  12.     # 杀死进程,释放内存
  13.     @thread.kill
  14.   end
  15. end


现在我想要创建一个代码块,包含loop do循环,想和主进程并行,但并不立即执行,是应该用proc再call呢,还是用thread先stop需要使用时在run或是wakeup呢?

菜鸟求教!
另外,虽然问题很多,但是关于一个冷门话题不想多发这么多贴,所以版主见谅哈~扣分手下留情  
作者: heiwang1997    时间: 2014-3-29 16:47
本帖最后由 heiwang1997 于 2014-3-30 14:04 编辑

@hys111111  @天地有正气 跪求版主帮我移到RM技术去吧,这里好像没有人对这个问题感兴趣~
谢谢谢谢!  
作者: 铅笔描绘的思念    时间: 2014-4-12 16:43
本帖最后由 恋′挂机 于 2014-4-13 13:48 编辑

Proc的话 就是拿来存储代码供稍后调用。。
官方文档  是ruby1.9.3之后支持
  1. a = Proc.new { puts "Hello World!" }
  2. a.call# => "Hello World!"
复制代码
看出输出的信息其实就相当于执行一次尖括号内的语句

而Thread咱就不懂了。。
然后求版主帮代码框一下。。
作者: 寒冷魔王    时间: 2014-11-8 23:05
本帖最后由 寒冷魔王 于 2014-11-8 23:11 编辑
铅笔描绘的思念 发表于 2014-4-12 16:43
Proc的话 就是拿来存储代码供稍后调用。。
官方文档  是ruby1.9.3之后支持看出输出的信息其实就相当于执行 ...

Proc.new{&block}
Thread.new{&block}
貌似{&block}里的被传递过来都成为Proc呢?
RUBY 代码复制
  1. def pp(&block)
  2.   return block
  3. end
  4. p pp{p "Hello"}
Thread是线程,可以并行运行程序,很有用的。(话说我也是最近才学的)
另外
RUBY 代码复制
  1. def pp(&block)
  2.   instance_eval &block
  3. end
  4. def pp(&block)
  5.   block.call
  6. end

两个貌似是一样的?
作者: 寒冷魔王    时间: 2014-11-9 08:48
@taroxd   找到了……

如果没有使用instance_eval,如下面的代码,ruby就会抛出一个NoMethodError,因为source、owner、mode无法在block中被访问到。
RUBY 代码复制
  1. class TemplateDSL
  2.       def initialize(path, &block)
  3.         @path = path
  4.         block.call
  5.       end
  6.     end
当然也可以使用yeild传递变量的方式实现,但没有instance_eval简洁和灵活。


作者: chd114    时间: 2014-11-9 12:19
寒冷魔王 发表于 2014-11-8 06:05
Proc.new{&block}
Thread.new{&block}
貌似{&block}里的被传递过来都成为Proc呢?def pp(&block)

半年前的贴都被你们挖出来了···




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1