这个符号可以用来调用某个类中的嵌套(nested)类。
嵌套类的定义:可以把类放入其它的类之中。如果某个类依赖于其他类,而这些其它类仅在此处有用,在其它地方无用,在这样的情况下,可以使用嵌套类。
举个简单的例子。这样的话你输入复制代码
- class ABC
- class DEF
- def self.G
- return 'a'
- end
- end
- end
试试效果?复制代码
- print ABC::DEF.G
如果窗口中弹出了"a",那么恭喜你!
其中的符号::就是调用了class ABC中的class DEF,由于这是嵌套类,所以在外面不能直接调用,需要用符号::分隔各个嵌套的类完整地把各个类表示出来。
嵌套类与普通类的定义方法完全相同,但用法不同。
再举一个嵌套类的例子。在Cake类中,输入复制代码
- class Cake
- def self.give_me_a_cake
- Cream_cake.new.give_me_a_cake
- end
- class Cream_cake
- def give_me_a_cake
- print "This is a cream cake"
- end
- end
- class Water_cake
- def give_me_a_cake
- print "This is a water cake"
- end
- end
- end
可以直接转入class Cake中嵌套的class Cream_cake。但是在Cake类之外,就只能使用Cake::Cream_Cake或Cake::Water_Cake的形式访问class Cream_cake和Water_cake。复制代码
- Cream_cake.new.give_me_a_cake
如:好了,再回到楼主所说的问题。复制代码
- Cake.give_me_a_cake
- #=>"This is a cream cake"
- Cream_cake.new.give_me_a_cake
- #=>NameError
- Cake::Cream_cake.new.give_me_a_cake
- #=>"This is a cream cake"
- Cake::Water_cake.new.give_me_a_cake
- #=>"This is a water cake"
楼主所说的RPG::sth.中的RPG是RGSS中的一个内部模块(module)与例子中的class有细微的区别(由于楼主的问题并不是module和class的区别,这里不详细介绍,楼主暂时把module当作一个没有initialize的特殊class就可以了)。
module RPG中的内容可以在F1帮助文档中找到。
这是其中的一段比较短的内容。比如这一段脚本,想要调用其中的Troop中的initialize应该如何调用呢?复制代码
- module RPG
- class Troop
- def initialize
- @id = 0
- @name = ""
- @members = []
- @pages = [RPG::BattleEventPage.new]
- end
- attr_accessor :id
- attr_accessor :name
- attr_accessor :members
- attr_accessor :pages
- end
- end
(这里当做一个考题留给楼主,楼主可以通过我前面给的例子找到答案)
好了,就讲到这里,希望能够帮助你理解吧。
谢谢蛋糕大大的热心解答和楼上几位前辈的解答.现在貌似懂一点点了.但关于蛋糕第二
部分的教程还是不太理解.还有就是把第二部分放到脚本编辑器后会出现"uninitialize
d constant for Cream_Cake."
还有这句不太懂:
@ ...
蓝色水晶 发表于 2009-11-7 12:33
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |