Ruby 对于字符串插值语法,如何从类到方法获得不同的行为?
我编写了一个类,它的行为类似于另一个类的数组。我有一个to_s方法,当按如下方式使用时,它以类似的方式返回数组:Ruby 对于字符串插值语法,如何从类到方法获得不同的行为?,ruby,class,methods,Ruby,Class,Methods,我编写了一个类,它的行为类似于另一个类的数组。我有一个to_s方法,当按如下方式使用时,它以类似的方式返回数组: array = [1, 2, 3, 4] puts array 这将导致输出: 1 2 3 4 与字符串插值一起使用时,put“#{array}”输出不同: [1, 2, 3, 4] 如何在类中实现to_s方法,以便在字符串插值中未使用时提供多行输出,在字符串插值中使用时提供单行输出 我曾考虑尝试使用caller\u位置(1,1)[0]获取呼叫者标签。标签,但这似乎远远不够理想
array = [1, 2, 3, 4]
puts array
这将导致输出:
1
2
3
4
与字符串插值一起使用时,put“#{array}”
输出不同:
[1, 2, 3, 4]
如何在类中实现to_s方法,以便在字符串插值中未使用时提供多行输出,在字符串插值中使用时提供单行输出
我曾考虑尝试使用caller\u位置(1,1)[0]获取呼叫者标签。标签
,但这似乎远远不够理想。如果您对相关文档有任何帮助或指导,我将不胜感激,因为我还没有找到关于这个主题的任何信息。谢谢 Array#to_s
不(也不应该)检查调用它的上下文。数组的打印方式不同,因为put
检查给定参数是否为数组(或是否可以转换为数组)。从:
如果使用数组参数调用,则将每个元素写入新行
您可以提供一个到_ary
方法:
class MyArray
def to_s
[1, 2, 3].join('-')
end
def to_ary
[1, 2, 3]
end
end
a = MyArray.new
puts a # calls to_ary and then prints each item on a separate line
# 1
# 2
# 3
puts a.to_s # just prints the result of to_s
# 1-2-3
puts "#{a}" # same as above
# 1-2-3
你的
收件人是什么样子的?它返回的是字符串还是数组?My to_s方法遍历一个局部数组,用换行符将字符串添加到输出变量中,然后返回输出变量。