我是Ruby的新手,我正试图解决这个问题:
class SuperString < String
def size
"The Size: " + super.size.to_s
end
end
a = SuperString.new("My String")
b = String.new("My String")
puts a.size
puts b.size
输出结果为:
"The Size: 8"
9
为什么一个8和另一个9?
答案 0 :(得分:3)
使用SuperString.new("My String").size
,
super
调用超类的方法String#size
,并返回9
,这是字符串"My String"
的长度。9.size
将返回8
,这是用于表示Fixnum
的字节数。8.to_s
将返回"8"
。使用String.new("My String").size
,
size
将返回9
,这是字符串"My String"
的长度。答案 1 :(得分:1)
这是因为你在方法.super上调用方法.size,.super调用你的类SuperString的超类(在本例中是String),以获取与你当前方法同名的方法定义
通过在super上调用.size,你实际上在super的返回值上调用.size(这是“我的字符串”的大小,即9)。
以下是你想要的方法
class SuperString < String
def size
"The Size: " + super.to_s
end
end
a = SuperString.new("My String")
b = String.new("My String")
a.size # => "The Size: 9"
b.size # => 9
class SuperString < String
def size
"The Size: " + super.to_s
end
end
a = SuperString.new("My String")
b = String.new("My String")
a.size # => "The Size: 9"
b.size # => 9
答案 2 :(得分:0)
an_string = "My String"
class SuperString < String
def size
x = super
p x
y = x.size
p y
z = y.to_s
p z
"The Size: " + z
end
end
a = SuperString.new an_string
b = String.new an_string
puts a.size
p a
puts b.size
p b
输出
9
8
"8"
The Size: 8
"My String"
9
"My String"
然后我尝试了:
Ezekiels-MacBook-Pro:/Users/tehgeekmeister| irb
1.9.3p327 :001 > 9.size
=> 8
1.9.3p327 :002 > 8.size
=> 8
1.9.3p327 :003 > 7.size
=> 8
1.9.3p327 :004 > 256.size
=> 8
1.9.3p327 :005 > 1000000000000000000000000000.size
=> 12
基本上,8是表示大小的整数的大小。它使用8个字节。 = P