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

Project1

 找回密码
 注册会员
搜索
楼主: zh99998
打印 上一主题 下一主题

问几个涉及到Ruby底层的问题……

 关闭 [复制链接]

Lv2.观梦者

神隐的主犯

梦石
0
星屑
283
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

31
发表于 2009-3-18 02:06:11 | 只看该作者
恩。

感觉编译器会先扫描一遍,查查错误,合并一下同名类什么的,大概~

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-12-20
帖子
213
32
发表于 2009-3-18 16:20:52 | 只看该作者
以下引用zh99998于2009-3-17 12:46:06的发言:


以下引用亿万星辰于2009-3-16 16:44:23的发言:

有点理解不了了,能举例说明一下么


class A
def initialize
   B.new
end
end
class B
def initialize
   #在这里获取调用者,应该是$a
end
end
$a = A.new

其中B类是自己定义的,A类和$a = A.new都是已经写好,不能更改不知内容的,只能确定A类的实例生成并且调用了B的initialize


不可能!! ~ ruby =号不可能获取到 左值的。。
哼哼。。。。
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
609
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

33
 楼主| 发表于 2009-3-18 20:30:50 | 只看该作者
…………………………………………
貌似我的表达能力差到一定境界了
  1. class B
  2.   def initialize(obj)
  3.     $obj = obj
  4.     p $obj
  5.   end
  6. end
  7. class A
  8.   def initialize
  9.     B.new(self)
  10.   end
  11. end
  12. $a = A.new
复制代码
这样写,能输出 #<A:0x30edeb8>

但是现在A类已经定义好了,不能再修改,里面调用B的时候并没有把self传递下去
  1. class A
  2.   def initialize
  3.     B.new
  4.   end
  5. end
复制代码
要怎样定义B才能获取那个已经生成了的A的实例,即 #<A:0x30edeb8>
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
283
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

34
发表于 2009-3-18 20:45:22 | 只看该作者
class A
  attr_accessor :timer                  
  def initialize
    @timer = 1
  end
end
class A
def geta(a)
   B.new(a)
end
end
class B
def initialize(callers)
   p callers
end
end
a = A.new
p a
a.geta(a)

不知道你到底想做什么。 如果行不通,90% 是算法的问题。

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
283
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

35
发表于 2009-3-18 20:46:13 | 只看该作者
测试过了,内存指针指向同一个地址。

---------------------------
Project1
---------------------------
#<A:0x2c611a8 @timer=1>
---------------------------
确定   
---------------------------



---------------------------
Project1
---------------------------
#<A:0x2c611a8 @timer=1>
---------------------------
确定   
---------------------------

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
609
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

36
 楼主| 发表于 2009-3-18 20:48:36 | 只看该作者
嗯……caller只能获得方法名,行号,和文件名,不能获取实例
B.new(a)
A类是已经定义好不能更改的,或者说不知道A里面是怎么定义的,它调用B的时候并没有把自己作为参数传递下去
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
283
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

37
发表于 2009-3-18 20:49:14 | 只看该作者
以下引用zh99998于2009-3-18 12:48:36的发言:

嗯……caller只能获得方法名,行号,和文件名,不能获取实例


看清楚,那个不是方法,是局部变量

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
283
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

38
发表于 2009-3-18 20:52:32 | 只看该作者
以下引用zh99998于2009-3-18 12:48:36的发言:

A类是已经定义好不能更改的,或者说不知道A里面是怎么定义的,它调用B的时候并没有把自己作为参数传递下去


你就不能自己定义一个方法吗?
类里又不是不准追加定义。

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
609
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

39
 楼主| 发表于 2009-3-18 20:54:02 | 只看该作者
因为不知道A里的那个方法是怎么定义的,所以不能改它
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
283
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

40
发表于 2009-3-18 20:54:55 | 只看该作者
以下引用zh99998于2009-3-18 12:54:02的发言:

因为不知道A里的那个方法是怎么定义的,所以不能改它


你到底是想要把 A 里方法套出来,还是要拿到 A 的某个实例?

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-21 19:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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