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

Project1

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

[已经解决] 定义new方法和定义initialize有区别吗

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1939
在线时间
403 小时
注册时间
2015-8-30
帖子
395
跳转到指定楼层
1
发表于 2016-4-12 21:39:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
看下面这两段代码:
RUBY 代码复制
  1. class A
  2.   alias self.old_new self.new
  3.   def self.new
  4.     ...
  5.     self.old_new
  6.   end
  7. end
  8. a = A.new
RUBY 代码复制
  1. class A
  2.   def initialize
  3.     ...
  4.   end
  5. end
  6. a = A.new

它们有区别吗?
小仙女一枚~
头像被屏蔽

Lv1.梦旅人 (禁止访问)

梦石
0
星屑
88
在线时间
631 小时
注册时间
2014-8-4
帖子
3600
2
发表于 2016-4-12 22:02:08 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21686
在线时间
9420 小时
注册时间
2012-6-19
帖子
7119

开拓者短篇九导演组冠军

3
发表于 2016-4-12 23:42:00 | 只看该作者
没区别,但你必须时刻注意 new 方法的返回值, initialize 则无所谓
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21686
在线时间
9420 小时
注册时间
2012-6-19
帖子
7119

开拓者短篇九导演组冠军

4
发表于 2016-4-12 23:42:21 | 只看该作者
本帖最后由 喵呜喵5 于 2016-4-12 23:52 编辑

没区别,但你必须时刻注意 new 方法的返回值, initialize 则无所谓

啧网络一卡连贴了……看了下你问题的描述

你一楼给出的代码是有区别的,因为你的第一段代码根本无法运行

另外多说一句,我个人看来,去重定义 Class.new 是很蠢的一件事
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1939
在线时间
403 小时
注册时间
2015-8-30
帖子
395
5
 楼主| 发表于 2016-4-13 19:30:05 | 只看该作者
喵呜喵5 发表于 2016-4-12 23:42
没区别,但你必须时刻注意 new 方法的返回值, initialize 则无所谓

啧网络一卡连贴了……看了下你问题的 ...

那为什么alias不能重定义类方法呢?如果要用第一种方法的话,是不是要这样:
  1. class A
  2. end
  3. class << A
  4.   alias old_new new
  5.   ...
  6. end
复制代码
小仙女一枚~
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21686
在线时间
9420 小时
注册时间
2012-6-19
帖子
7119

开拓者短篇九导演组冠军

6
发表于 2016-4-13 20:58:34 | 只看该作者
本帖最后由 喵呜喵5 于 2016-4-13 21:06 编辑
有丘直方 发表于 2016-4-13 19:30
那为什么alias不能重定义类方法呢?如果要用第一种方法的话,是不是要这样: ...


个人理解(未必正确):
因为和 js 或者 python 语言不同,在 Ruby 中,方法并不是对象
所以,作为关键字,如果 alias 支持方法调用(.),那么 Ruby 将无法判断,你是希望 alias 方法本身还是这个方法执行后的返回值,否则的话
  1. alias self.old_new self.new
复制代码
在逻辑上等同于
  1. a = self.old_new
  2. b = self.new
  3. alias a b
复制代码
你所 alias 的不是这个方法,而是执行这个方法后的返回值


另外,还是那句话,去 alias new 是一件很蠢的事情,我也想不到有什么场景需要 alias new

评分

参与人数 1梦石 +1 收起 理由
正太君 + 1 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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