1

我的第一个堆栈溢出帖子。我应该简洁明了,但请在第一次出现时让我沉迷于一些背景知识。我已经用 C 和 Visual Basic 编程了 16 年,但只是兼职来支持我作为科学家的工作。大约一年前开始学习 ruby​​ 并且非常喜欢它。我正在编写一个处理数据的程序。这适用于文件夹和文件,而不是数据库。每次遇到困难时,我总能在这里(多么棒的资源!)或在 Google 上找到解决方案。这一次不同。所以说重点:

我想在 ruby​​ 中使用 highline gem 来显示具有可变数量菜单项的菜单。本质上,我希望用户选择一个目录。父目录中可以有任意数量的目录。我的代码如下:

@allArchiveDirs =  Dir.entries(@dirArchive).select {|entry| File.directory? File.join(@dirArchive,entry) and !(entry =='.' || entry == '..') }
p @allArchiveDirs

choose do |menu|
  menu.prompt = 'Please choose a project to access:'
  temp = @allArchiveDirs.map &:to_sym
  # todo here. Cannot get temp into correct format for choices call.
  temp = temp.map{|x| x.inspect}.join(', ')
  p temp
  menu.choices(:old1, :old5) do |chosen|
    puts "Item chosen: #{chosen}"
  end
end

在 menu.choices 调用的括号中,我通常会有 temp,但目前我有 :old1, :old5 只是为了我自己的调试目的,否则我会收到错误。

输出是:

[“deletemetest”、“old2”、“old3”、“old4”、“TestData”、“testy123”、“tsty”]

“:deletemetest,:old2,:old3,:old4,:TestData,:testy123,:tsty”

  1. 老1
  2. 老5

请选择要访问的项目:

所以符号似乎是一个字符串(由于它周围的引号)。如果我可以删除这些,我可能会成功地将 temp 转换为 menu.choice 调用的正确格式。

4

1 回答 1

2

您实际上不需要进行所有这些类型转换,您所需要的只是 splat 运算符

@allArchiveDirs = ["deletemetest", "old2", "old3", "old4", "TestData", "testy123", "tsty"]
choose do |menu|
  menu.prompt = 'Please choose a project to access:'
   menu.choices(*@allArchiveDirs) do |chosen|
    puts "Item chosen: #{chosen}"
  end
end

输出:

1. deletemetest
2. old2
3. old3
4. old4
5. TestData
6. testy123
7. tsty
Please choose a project to access:
于 2014-07-26T04:25:53.563 回答