Ruby では、他の引数にはデフォルト値を使用しながら、特定の 1 つのメソッド引数のみの値を設定するにはどうすればよいでしょうか?

概要

このクラスのparent_classインスタンス変数のデフォルト値は「String」です。 parent_class = “None” のインスタンスを作成したいと考えています。 super_string1 インスタンス定義は正しく機能しますが、super_string2 インスタンスは機能しません。 super_string2 宣言の何が間違っているのでしょうか?

class SuperString < String
  def initialize(str,id_num = 0,parent_class = "String")
    super(str)
    @id_num = id_num
    @str_length = str.length
    @creator = "Me"
    @parent_class = parent_class
  end
  
  attr_accessor :id_num, :str_length, :creator, :parent_class
end

super_string1 = SuperString.new("world", 0, "None")
puts super_string1.parent_class

super_string2 = SuperString.new("world", parent_class = "None") # This one doesn't work right
puts super_string2.parent_class

このコードの出力は次のとおりです。

None
String

解決策

オプションのキーワード引数を使用できます

 class SuperString < String
   def initialize(str, id_num: 0, parent_class: "String")
     super(str)
     @id_num = id_num
     @str_length = str.length
     @creator = "Me"
     @parent_class = parent_class
  end

  attr_accessor :id_num, :str_length, :creator, :parent_class
end

super_string1 = SuperString.new("world", id_num: 0, parent_class: "None")
super_string1.parent_class

super_string2 = SuperString.new("world", parent_class: "None")
super_string2.parent_class

super_string3 = SuperString.new("world")
super_string3.parent_class

"None"
"None"
"String"

https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://www.ombulabs.com/blog/ruby/learning/methods-arguments-ruby-part2.html