Project1

标题: 关于实例的奇怪问题 [打印本页]

作者: zh99998    时间: 2008-11-16 03:45
标题: 关于实例的奇怪问题
如果把一个实例赋值或克隆(.clone/.dup)到另一个变量,改变其中一个,有的类的实例另一个会随着改变(如:RPG::MapInfo)
有的类的实例不会随着改变(如:整数类)

更为奇怪的是,有的类某些方法的执行会两个变量都改变,另一些却不会
a = [1]
b = a
b[0] += 1
p a => 2
但是
a = [1]
b = a
b.push 1
p a => [1]
请问这是为什么 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: kissye    时间: 2008-11-16 03:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2008-11-16 03:49
以下引用kissye于2008-11-15 19:48:55的发言:

p(obj, [obj2, ...])
将 obj 以人类可读的形式输出。相当于下面的代码(参看 Object#inspect):
print obj.inspect, "\n", obj2.inspect, "\n", ...
在 Ruby 中,原本是标准的输出,但是在RGSS中重新定义了此方法,改成显示对话窗口。
返回 nil。


以上引自帮助手册
def inspect
end

所以?

作者: kissye    时间: 2008-11-16 03:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2008-11-16 03:52
print [Viewport.new(1,2,3,4),Color.new(1,2,3,4)]
=>
#<Viewport:0x4cfbd30>(1.000000, 2.000000, 3.000000, 4.000000)

这可没inspect
作者: kissye    时间: 2008-11-16 03:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: 沉影不器    时间: 2008-11-16 03:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2008-11-16 03:57
看好我用的是print
print不执行inspect的
以下引用kissye于2008-11-15 19:48:55的发言:
p(obj, [obj2, ...])
将 obj 以人类可读的形式输出。相当于下面的代码(参看 Object#inspect):
print obj.inspect, "\n", obj2.inspect, "\n", ...
在 Ruby 中,原本是标准的输出,但是在RGSS中重新定义了此方法,改成显示对话窗口。
返回 nil。


作者: kissye    时间: 2008-11-16 04:05
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2008-11-16 04:14
p a相当于print a.inspect
所以print a不会执行inspect

作者: 沉影不器    时间: 2008-11-16 04:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2008-11-16 04:30
以下引用沉影不器于2008-11-15 20:22:14的发言:


以下引用zh99998于2008-11-15 20:14:38的发言:

p a相当于print a.inspect
所以print a不会执行inspect


是的

class Color
def inspect
   return "red:#{self.red},green:#{self.green};blue:#{self.blue}"
end
end
print Color.new(128,128,128)
p Color.new(128,128,128)


所以,又回到楼顶的问题了
作者: 沉影不器    时间: 2008-11-16 04:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2008-11-16 04:35
但是print出来的结果也是不同的
作者: 沉影不器    时间: 2008-11-16 04:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2008-11-16 04:43
-0-明白了
楼顶的第二个问题
作者: 沉影    时间: 2008-11-16 04:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2008-11-16 04:56
………………………………
我错了

这个

a = "a"
b = a
b += "b"
p a =>"a"
作者: 沉影    时间: 2008-11-16 05:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2008-11-16 05:03
那,还有哪些类是这样的
作者: 沉影    时间: 2008-11-16 05:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2008-11-16 05:09
额,thx
不过还是不知道原因




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1