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

Project1

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

[已经解决] 如何让事件中的脚本调用F11脚本编辑器中定义的函数?

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

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
4 小时
注册时间
2011-10-16
帖子
81
跳转到指定楼层
1
发表于 2011-11-2 14:26:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv3.寻梦者

酱油的

梦石
0
星屑
1030
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

2
发表于 2011-11-2 15:20:29 | 只看该作者
腳本解釋器調用的是 Interpreter scope 中可以調用方法= =b
你要麼把他扔到 class Interpreter 下,要麼全局化
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
4 小时
注册时间
2011-10-16
帖子
81
3
 楼主| 发表于 2011-11-2 16:21:01 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
4
发表于 2011-11-4 10:57:58 | 只看该作者
先抛开作用域不谈,单说词法分析问题。由于 `DestroyEvent' 这个单词的首字母是大写的,Ruby 解释器在看到它的时候会认为这是个常量,并尝试在当前命名空间中解析该常量,这个的结果自然是失败的。你需要告诉解释器这是一个方法调用,而不是一次常量的引用,就好比同名的局部变量和方法也需要显式地去区分一样。

  1. def DestroyEvent
  2.   "test"
  3. end

  4. DestroyEvent = 1

  5. p DestroyEvent      # => 1
  6. p DestroyEvent()    # => "test"
复制代码
同名的局部变量和方法也是同理。

再回到作用域的问题。在顶层(不在任何模块、类空间内)定义的方法最终的归属是 Object 类,这些所谓的全局方法其实是被定义为了 Object 类的实例方法,此后无论发送这个方法调用消息时的接收者是谁,都能响应消息,因为所有对象(1.9 的 BasicObject 实例除外)都是 Object 或其衍生类型。详见:
http://szsu.wordpress.com/2009/11/07/top_level_object_kernel/
http://rpg.blue/thread-154785-3-1.html (76 楼关于 `klass' 的部分)

至于 RM 在嵌入 Ruby 时是否在这点上产生了差异我已经不记得了,目前手头暂时没有 RM 环境,只能留待你自己去测试了。

[...] 我可以用一个全局变量赋上函数使用么?

Ruby 1.9 及之前版本并不支持一等(first-class)函数,支持一等函数是 Ruby 2.0 的一个目标。Ruby 目前支持非方法结构的闭包、lambda 演算以及方法的封装类,这些都不能算是一等函数,不过倒是可以变相实现你问题中的这个要求。

使用闭包:

  1. $pDEFun = lambda do
  2.   "test"
  3. end

  4. p $pDEFun.call # => "test"
复制代码
使用已绑定的方法封装类实例:

  1. def foo
  2.   "test"
  3. end

  4. $pDEFun = method :foo

  5. p $pDEFun.call # => "test"
复制代码
使用未绑定的方法封装类实例:

  1. def foo
  2.   "test"
  3. end

  4. $pDEFun = Object.instance_method :foo

  5. p $pDEFun.bind(self).call # => "test"
复制代码

点评

原来默认大写ruby当常量用啊.....习惯把类名和函数名都大写的伤不起了......  发表于 2011-11-4 12:47
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 17:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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