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

Project1

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

[已经解决] 关于脚本学习中的一些疑问

[复制链接]

Lv5.捕梦者

梦石
0
星屑
30885
在线时间
608 小时
注册时间
2014-7-18
帖子
729

开拓者

跳转到指定楼层
1
发表于 2015-8-18 22:57:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
正在学习脚本,有以下几个问题:
①instance_eval和class_eval这两个方法分别有什么用,是干什么的?链接:https://rpg.blue/thread-154785-3-1.html这个贴的3页77楼。
②1.p respond to?:foo  #true     这里面respond to?什么意思?
  2.class << obj  这里的<<方法是什么意思?给个贴让我学一下...(记得以前有过介绍的贴)
    3.instance_method是什么方法,有什么用
    4.m_foo_unbound.bind(obj).call  #:"klass#foo"
              bind(obj).call是什么,有什么用?
             另外,#出现在这里是什么意思?
总链接:https://rpg.blue/thread-154785-3-1.html这个贴的1页93楼。



Lv5.捕梦者

梦石
0
星屑
30885
在线时间
608 小时
注册时间
2014-7-18
帖子
729

开拓者

5
 楼主| 发表于 2015-8-19 12:07:03 | 只看该作者
喵呜喵5 发表于 2015-8-19 00:16
以下是个人想法,说实话刚接触脚本并且学Ruby的目的仅仅只是利用RM来做游戏的话,别看那个技术区那个帖子, ...

话说鼠标脚本是不是涉及到元编程了?
我设计的游戏里需要鼠标操控,而且想要做出比较好的效果,所以想自己写鼠标脚本。
请问一下,那样需要元编程吗?(因为要做在地图上就能点击下方的功能按钮来调出菜单的功能)

点评

不通过元编程也可以写出一套鼠标脚本  发表于 2015-8-19 12:16
不需要  发表于 2015-8-19 12:15
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
30885
在线时间
608 小时
注册时间
2014-7-18
帖子
729

开拓者

4
 楼主| 发表于 2015-8-19 12:01:46 | 只看该作者
taroxd 发表于 2015-8-19 10:03
更好的解答:
①http://ruby-doc.org/core-2.2.2/BasicObject.html#method-i-instance_eval
   http://ru ...

针对这一句:愚蠢的人类为何总是不会看文档
我给出一下解释:
我不是英国人/美国人,虽然学了点英语,但是微不足道,况且我才上初中,英语水平很低......

点评

其实这贴也是开玩笑的......  发表于 2015-8-19 12:20
那句开玩笑的,所以都有删除线了嘛233  发表于 2015-8-19 12:14
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

3
发表于 2015-8-19 10:03:05 | 只看该作者
本帖最后由 taroxd 于 2015-8-19 10:11 编辑
喵呜喵5 发表于 2015-8-19 00:16
以下是个人想法,说实话刚接触脚本并且学Ruby的目的仅仅只是利用RM来做游戏的话,别看那个技术区那个帖子, ...


更好的解答:
http://ruby-doc.org/core-2.2.2/B ... hod-i-instance_eval
   http://ruby-doc.org/core-2.2.2/Module.html#method-i-class_eval




愚蠢的人类为何总是不会看文档
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

2
发表于 2015-8-19 00:16:25 | 只看该作者
本帖最后由 喵呜喵5 于 2015-8-19 00:18 编辑

以下是个人想法,说实话刚接触脚本并且学Ruby的目的仅仅只是利用RM来做游戏的话,别看那个技术区那个帖子,会走火入魔的……基础都没打牢就去看这种元编程教程纯粹作死,坐等楼下Taroxd给出更好的解答:

1.其实我觉得你暂时没必要搞清楚这两个方法的区别……并且解释的话我觉得77楼说的挺详细的了……如果现在你还看不懂那些解释到底在说什么的话……你也用不上这两个方法

2.
一般在RGSS中,只要搞懂
  1. class A
  2.     def self.hello
  3.         p "world"
  4.     end
  5. end
复制代码
  1. class << A
  2.     def hello
  3.         p "world"
  4.     end
  5. end
复制代码
这两段代码作用相同
  1. class A
  2.     def self.hello
  3.         p @hello
  4.     end
  5. end
复制代码
  1. class << A
  2.     attr_reader :hello
  3. end
复制代码
这两段代码作用相同其实就够了,class << obj 进入obj的eigenclass,具体百度 Ruby eigenclass

3.返回实例方法,不玩元编程的话我想不到有什么卵用

4.
bind(obj)
将self绑定到obj上生成并返回一个bound method对象(即Method对象)。只能对下列两种对象进行绑定:调用过unbind方法的对象的类的实例;内部包含(定义某方法的)模块的类的实例。除此以外将引发TypeError异常。
RUBY 代码复制
  1. # 类的实例方法的UnboundMethod
  2.  
  3. class Foo
  4.   def foo
  5.     "foo"
  6.   end
  7. end
  8.  
  9. # 生成UnboundMethod `m'
  10. p m = Foo.instance_method(:foo) # => #<UnboundMethod: Foo(Foo)#foo>
  11.  
  12. # 生成Method对象,它以Foo的实例为receiver
  13. p m.bind(Foo.new)               # => #<Method: Foo(Foo)#foo>
  14.  
  15. # 生成Method对象,它以Foo的Bar子类
  16. # 的实例为receiver(被禁止)
  17. #  ruby 1.8 特性: 取消了该限制
  18.  
  19. class Bar < Foo
  20. end
  21. # p m.bind(Bar.new)               # => -18:in `bind': bind argument must be an instance of Foo (TypeError)
  22.  
  23. # 定义同名的特殊方法也不行
  24. class << obj = Foo.new
  25.   def foo
  26.   end
  27. end
  28. p m.bind(obj)                   # => -:25:in `bind': method `foo' overridden (TypeError)
  29.  
  30. # 模块的实例方法的UnboundMethod
  31.  
  32. module Foo
  33.   def foo
  34.     "foo"
  35.   end
  36. end
  37.  
  38. # 生成UnboundMethod `m'
  39. p m = Foo.instance_method(:foo) # => #<UnboundMethod: Foo(Foo)#foo>
  40.  
  41. # 生成Method对象,它以内部包含Foo的Bar类
  42. # 的实例为receiver
  43. class Bar
  44.   include Foo
  45. end
  46. p m.bind(Bar.new)               # => #<Method: Bar(Foo)#foo>
  47.  
  48. # Bar的子类也包含Foo,所以没问题
  49. class Baz <Bar
  50. end
  51. p m.bind(Baz.new)               # => #<Method: Baz(Foo)#foo>
  52.  
  53. # 定义同名的特殊方法也不行
  54. class << obj = Baz.new
  55.   def foo
  56.   end
  57. end
  58. p m.bind(obj)                   # => -:27:in `bind': method `foo' overridden (TypeError)


call 调用方法

m_foo_unbound.bind(obj).call  # => :"Klass#foo"
注释后的内容表示输出结果为 Klass#foo…………= =

   

点评

其实新版本的Ruby已经可以把 module 的 instance_method 随便绑定了…… 可惜 VA 不能  发表于 2015-8-19 10:07

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 16:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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