【问题标题】:Why does Array.to_s return brackets?为什么 Array.to_s 返回括号?
【发布时间】:2012-02-08 10:02:48
【问题描述】:

对于一个数组,当我输入时:

puts array[0]

==> text 

当我输入时

puts array[0].to_s

==> ["text"]

为什么是括号和引号?我错过了什么?

附录:我的代码如下所示

page = open(url)  {|f| f.read }
page_array = page.scan(/regex/) #pulls partial urls into an array
partial_url = page_array[0].to_s
full_url = base_url + partial_url #adds each partial url to a consistent base_url
puts full_url

我得到的看起来像:

http://www.stackoverflow/["questions"]

【问题讨论】:

  • 您的array 中有什么内容?你说的是哪个 Ruby 版本(这里有 1.8 和 1.9 的区别)
  • 向我们展示您的数组的定义
  • 把它放在你的问题中;这是难以辨认的。
  • 试试p array,我想你会得到[["text"]]的输出。我只是猜测。
  • @Iain 但这对我有什么好处?如何只获取文本,不带引号和括号?

标签: ruby regex arrays html-parsing


【解决方案1】:

您需要向我们展示正则表达式才能真正正确地解决此问题,但这会做到:

替换这个

partial_url = page_array[0].to_s

有了这个

partial_url = page_array[0][0]

【讨论】:

  • 谢谢!做到了。但你是对的,这是一个正则表达式问题。
【解决方案2】:

这不一定能解决为什么你得到一个双倍数组,但你可以把它展平,然后像这样调用第一个元素。

page_array = page.scan(/regex/).flatten

扁平化取出堆叠的数组并创建一层,所以如果你有[1,2,[3,[4,5,6]]]并在上面调用flatten,你会得到[1,2,3,4,5,6]

它也比 array[0][0] 更健壮,因为如果您在第一个元素中嵌套了两个以上的数组,您会遇到同样的问题。

Iain 是正确的,但如果没有看到正则表达式,我们无法找出根本原因。

【讨论】:

    【解决方案3】:

    to_s 只是检查 Array 类的别名。

    这并不是说除了期望 array.to_s 返回一个字符串之外,它实际上返回的是 array.inspect ,根据方法的名称,这并不是您真正想要的。

    如果你只想要“胆量”试试:

    page_array.join
    

    如果数组有多个元素:

    page_array.join(" ")
    

    这将使:

    page_array = ["test","this","function"]
    

    返回:

    "test this function"
    

    Array 上的“to_s”返回的内容取决于您使用的 Ruby 版本,如上所述。 1.9.X 返回:

    "[\"test\"]"
    

    【讨论】:

      【解决方案4】:

      这会按原样打印数组,不带括号

      array.join(", ")
      

      【讨论】:

        猜你喜欢
        • 2016-04-30
        • 1970-01-01
        • 2016-06-04
        • 1970-01-01
        • 2012-07-29
        • 1970-01-01
        • 2019-06-18
        • 1970-01-01
        • 2015-10-10
        相关资源
        最近更新 更多