在Ruby中实现数组的_

在Ruby中实现数组的_,ruby,algorithm,recursion,multidimensional-array,tostring,Ruby,Algorithm,Recursion,Multidimensional Array,Tostring,Ruby的Array类具有内置的方法,可以将数组转换为字符串。此方法也适用于多维数组。这个方法是如何实现的 我想知道它,所以我可以重新实现一个方法my_to_s(ary),该方法可以接受多维数据并将其转换为字符串。但不是像这样返回对象的字符串表示形式 [[[1,2,3, Person.new('Mary')]],[4,5,6,7], Person.new('Paul'),2,3,8].to_s # [[[1, 2, 3, #<Person:0x283fec0 @name='Mary']],

Ruby的Array类具有内置的方法,可以将数组转换为字符串。此方法也适用于多维数组。这个方法是如何实现的

我想知道它,所以我可以重新实现一个方法my_to_s(ary),该方法可以接受多维数据并将其转换为字符串。但不是像这样返回对象的字符串表示形式

[[[1,2,3, Person.new('Mary')]],[4,5,6,7], Person.new('Paul'),2,3,8].to_s
# [[[1, 2, 3, #<Person:0x283fec0 @name='Mary']], [4, 5, 6, 7], #<Person:0x283fe30 @name='Paul'>, 2, 3, 8]   

对于嵌套元素,它只分别调用

def my_to_s
  case self
  when Enumerable then '[' << map(&:my_to_s).join(', ') << ']'
  else 
    to_s # or my own implementation
  end
end

更多面向对象方法:

class Object
  def my_to_s; to_s; end
end

class Enumerable
  def my_to_s
    '[' << map(&:my_to_s).join(', ') << ']'
  end
end

class Person
  def my_to_s
    "Student #{name}"
  end
end
类对象
定义我的到;给我们;结束
结束
类可枚举
定义我的

“[”对于嵌套元素,它只分别调用

def my_to_s
  case self
  when Enumerable then '[' << map(&:my_to_s).join(', ') << ']'
  else 
    to_s # or my own implementation
  end
end

更多面向对象方法:

class Object
  def my_to_s; to_s; end
end

class Enumerable
  def my_to_s
    '[' << map(&:my_to_s).join(', ') << ']'
  end
end

class Person
  def my_to_s
    "Student #{name}"
  end
end
类对象
定义我的目标;结束
结束
类可枚举
定义我的

“[”或
object.map{| o | my_to_s(o)}
以避免猴子补丁。您可能希望用
“[”
”包围嵌套的输出]“
。对于更面向对象的方法,您可以将
my_to_s
to
to
别名为
object
,并在
Enumerable
@Stefan
alias_方法
中重写它。
类对象;别名方法:my_to_s,:to_;end;5.my_to_
“#”
。啊!它可以工作,但它严格映射到
对象#到
@Stefan是的,它看起来多态性被破坏了,它只生成了一个到
对象#到(s)
。有趣的是,
对象.map{o |我的(U到)
以避免猴子补丁。而且您可能希望用
来包围嵌套的输出['
']
对于更面向对象的方法,您可以为
对象将
my_to_s
别名为
to_s
,并在
Enumerable
@Stefan
alias_方法
中重写它。对象类;alias_方法:my_to_to_s,:to_;end;5.my_to_
⇒ <代码>“#”
。啊!它可以工作,但是它严格地映射到
对象#到
@Stefan是的,它看起来多态性被破坏了,它只是产生了一个到
对象#到
的“硬链接”。有趣的是。我实际上相信你只是想覆盖
个人#到#
,以返回
“学生{self name}”
string。我实际上认为您只想覆盖
Person#to_s
以返回
“Student{self.name}”
string。