幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2656|回复: 2

[入门教程] 我想一定有人和我一样二。。。OTZ。。。class and module

[复制链接]

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2010-9-2 19:52:19 | 显示全部楼层 |阅读模式
前言
  我本来是已经打算退出R界了,实际上也是这样的哈,慢慢的淡出。昨天看到shawind大的帖子ruby1.9.1发布了,我就想下载下来看看什么样子,然后自己随便做了一点小东西。然后class的方法调用就出了问题。我懵了,随即想到了一点问题,拿出来和大家分享一下吧。我想大多数人不会犯这么二的问题,谁叫我基础不扎实呢。

那么开始正题吧。

我先说说类,也就是class。这个很简单
  1. class A
  2.   def a
  3.     p 1
  4.   end
  5. end
复制代码


这样一个类定义出来了,只有一个方法 def a。
方法是可以调用的。

可以这样调用
  1. tmp = A.new
  2. tmp.a
复制代码


或者是
  1. A.new.a
复制代码


但是绝对不能
  1. A.a
复制代码


我想一定有人 A.a 调用过方法,结果必然是悲剧。因为A是class而不是module

那么 说一下module 可能会出错的地方
  1. module A
  2.   def a
  3.     p 1
  4.   end
  5. end
复制代码


这样一个名字为A的module就定义出来了
但是有人看到 def a觉得可以调用,那是错误的。
  1. A.a
复制代码


必须悲剧啊。
可能有人想到 class A 可以
A.new.a来调用,相用到module上。别犯傻了。。。module可不是class 没有new 这个方法的。

大家可能看到了A.a这种调用方式怎么就是不行呢,而RM中经常看到 Audio.XX 这样的调用方式啊。


那么开始进入讲解部分了
A.a可以看出来没有new 的。它应该是一个模块才对。所以定义class的可以洗洗睡了。

看看这两个才是正确的
  1. module A
  2.   def self.a
  3.     p 1
  4.   end
  5. end
复制代码

  1. module A
  2.   class << self
  3.     def a
  4.       p 1
  5.     end
  6.   end
  7. end
复制代码


这两个才可以

  1. A.a
复制代码


以上,完毕。

大家好好打牢基础吧!!
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复

使用道具 举报

61

主题

330

帖子

3232

积分

⑥精研

人造神经病患者

积分
3232
发表于 2010-9-5 19:22:32 | 显示全部楼层
以前觉得Ruby很好很强大...但是现在觉得Ruby有点怪怪的...
笔没水了,暂时无法签名
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2010-9-5 21:07:21 | 显示全部楼层
还成吧,我用着挺习惯的
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-19 17:04 , Processed in 0.018566 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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