0

我是 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?

4

3 回答 3

4

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"
于 2012-12-31T07:29:48.687 回答
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

于 2013-01-01T06:35:33.507 回答
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

于 2012-12-31T07:10:11.037 回答