Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 对于字符串插值语法,如何从类到方法获得不同的行为?_Ruby_Class_Methods - Fatal编程技术网

Ruby 对于字符串插值语法,如何从类到方法获得不同的行为?

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]获取呼叫者标签。标签,但这似乎远远不够理想

我编写了一个类,它的行为类似于另一个类的数组。我有一个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#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方法遍历一个局部数组,用换行符将字符串添加到输出变量中,然后返回输出变量。