我是 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?
我是 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?
与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"
。这是因为您在方法 .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
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