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を返します。8Fixnum
  • 最後に、8.to_sを返し"8"ます。

String.new("My String").size

  • size9文字列の長さであるを返します"My String"
于 2012-12-31T07:29:48.687 に答える
1

これは、現在定義しているメソッドと同じ名前のメソッドに対して、クラス SuperString (この場合は String ) のスーパー クラスへのメソッド .super、.super 呼び出しでメソッド .size を呼び出したためです。

super で .size を呼び出すことにより、実際には super の戻り値で .size を呼び出しています (これは "My String" のサイズであり、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 に答える