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

Project1

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

[已经解决] 是不是所有的东西都有其所属的class或module

 关闭 [复制链接]

Lv1.梦旅人

℃ake

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-6-6
帖子
787
跳转到指定楼层
1
发表于 2009-10-30 17:54:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
  1. print "a".class
  2. #=> String
  3. print 0.class
  4. #=>Fixnum
  5. a = []
  6. print a.class
  7. #=>Array
复制代码
不光所有的数字和字符串都有一个所属的类,就连我们用的print和p,还有exit等指令,也都是Kernel模块里的一个函数。
  1. a = nil
  2. Kernel.print a
复制代码
  1. Kernel.exit
复制代码
(以前有人说直接def exit(a)想重定义右上角的"×",但是最好把重定义的内容前加上module Kernel,因为如果有人比较严谨的话,可能会用Kernel.exit,这样就会导致定义内容失效。)
  1. def abc
  2.   p "a"
  3. end

  4. Kernel.abc
复制代码
在没有给abc加module Kernel的情况下。电脑上惊讶地出现了 a 的提示。


于是,我就大胆地产生了一个猜想,是不是所有的东西都有其所属的class或module,我们看似写在一些类外面的东西系统会不会给一个默认的模块把它们一起扔进去了?
我爱66RPG,但我讨厌66.

Lv1.梦旅人

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
帖子
946
2
发表于 2009-10-30 17:55:09 | 只看该作者
回LZ,是。。。

ruby的特点
回复 支持 反对

使用道具 举报

Lv1.梦旅人

℃ake

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-6-6
帖子
787
3
 楼主| 发表于 2009-10-30 18:01:40 | 只看该作者
回LZ,是。。。

ruby的特点
secondsen 发表于 2009-10-30 17:55


哦,那么那些写在方法外面的东西会扔在哪个模块里呢?也是Kernel么?
比如单纯的一个代码
  1. a = 1
复制代码
连def end都没有,一打开就自动执行的,这样的方法外面的东西。
我爱66RPG,但我讨厌66.
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-3-30
帖子
40
4
发表于 2009-10-30 18:10:16 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

℃ake

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-6-6
帖子
787
5
 楼主| 发表于 2009-10-30 18:22:50 | 只看该作者
还有

  1. def print(a)
  2. end
  3. a = 10
  4. print a
复制代码
这样之后print就失效了,但是Kernel.print a却仍然有效,这说明我们重定义的print并没有覆盖掉Kernel里面的print,但是我们前面
  1. def abc
  2.   p "a"
  3. end

  4. Kernel.abc
复制代码
这说明我们定义的任何方法如果没有加class或module就默认为module Kernel。

那么,为什么重定义print的时候一定要加module Kernel才能表明写在Kernel模块里呢?
我爱66RPG,但我讨厌66.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
帖子
946
6
发表于 2009-10-30 18:27:05 | 只看该作者
本帖最后由 secondsen 于 2009-10-30 18:28 编辑

Class, Module, Object,Kernel的关系...人家最后声明,未经同意不得转载。。。

给你连接

http://www.cnblogs.com/cnblogsfa ... /01/27/1381134.html

.ancestors 就是查看父类。。。。你 p 一下就知道了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
128 小时
注册时间
2009-1-28
帖子
2790
7
发表于 2009-10-30 18:27:22 | 只看该作者
本帖最后由 霜冻之狼 于 2009-10-30 18:28 编辑
哦,那么那些写在方法外面的东西会扔在哪个模块里呢?也是Kernel么?
比如单纯的一个代码a = 1连def end都没有,一打开就自动执行的,这样的方法外面的东西。 ...
奶油Da蛋糕 发表于 2009-10-30 18:01

其实RM中所有的命令
包括print,def,end这些东西都是有人定义的函数……

只是这些默认函数在程序开发时就已经加进去了
所以你在脚本编辑器里看不到,但定义他们的方法其实是存在的……

炼金术的根本法则是等价交换。想要获得,必须失去同等价值的东西。每当烦躁的时候,煎熬在不想做却又正在做的烦心事中的时候,我就安慰自己,提醒自己做这些事情的目的所在,告诉自己不要忽略所获得或者即将获得的回报,物质的,精神的,肉体的,灵魂的回报!只做想做的事情,就会失去不想失去的东西。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-3-30
帖子
40
8
发表于 2009-10-30 18:30:14 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

魔王 ⑨

梦石
0
星屑
95
在线时间
380 小时
注册时间
2006-10-16
帖子
4299

贵宾

9
发表于 2009-10-30 18:47:27 | 只看该作者
RUBY是面向对象的语言。
同样,你所见到的都是对象 = =
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
286 小时
注册时间
2009-8-5
帖子
566
10
发表于 2009-10-30 18:59:07 | 只看该作者
如果不加入类或模块中,则为默认执行语句。用于需要在游戏开始进入标题画面前有些操作。比如说默认全屏的代码,可以不用加入类或模块中。
但是如果是进入游戏后,由某个类(事件中执行等),需要定义为方法调用。

让你们不应征,人家已经娶到老婆的口胡~~
--------------------------------------------------
作者blog(此人到处安家落户,其实东西都一样么==主号在百度):
点击我,我是度娘博客链接
点击我,我是网易博客链接
点击我,我是新浪博客链接

最近启动的RpgMakerXp人物立绘(头像)补完计划(不知何时才会有时间有心情画……)=》我是链接,查看作者龟速进度请戳我

曾经的作者初中到大学的进化过程=》我是链接,查看作者历史渣作请猛戳我
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-28 03:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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