如何在`basename'中解决:没有将Array隐式转换为String

时间:2015-05-29 19:31:04

标签: ruby

我想从ViddlRb获取一个没有扩展名的文件名。 如果我使用Youtube网址运行get_names方法,我将返回一个数组。我这样做:

    file = ViddlRb.get_names(url)
    file.first
    file.to_s
    puts file
    filename = File.basename(file, '.*')

但如果我正在运行它,我会得到:

  '中的

:没有将Array隐式转换为String

也许有人知道它为什么会破裂?我以为file.to_s做了那个工作。

1 个答案:

答案 0 :(得分:2)

当您致电file.to_s时,它会返回字符串转换的结果,但它修改您的file变量。与您对.first的通话相同。考虑这个例子:

file = ["filename.txt"]
file.first
file.to_s
=> "[\"filename.txt\"]"
puts file
=> ["filename.txt"]

解决问题的最简单方法是在basename参数中调用firstto_s。所以:

filename = File.basename(file.first.to_s, '.*')

在传入之前,您可以使用它创建另一个变量。