2014-07-26 2 views
1

처음으로 스택 오버플로 게시. 나는 간결하고 요점을 지키기로되어 있지만, 처음에는 나를 배경으로 나를 기쁘게 해준다. 저는 C와 Visual Basic에서 16 년 동안 프로그래밍을 해왔지만, 과학자로서의 저의 작업을 지원하는 데만 시간을 할애하고 있습니다. 1 년 전에 루비를 배우기 시작했고 정말로 그것을 즐긴다. 데이터를 처리하는 프로그램을 작성 중입니다. 이것은 데이터베이스가 아닌 폴더와 파일에서 작동합니다. 내가 갇힐 때마다, 나는 항상 여기에 해결책을 찾을 수있다. 이 시간은 다릅니다. 그래서 요점 :하이라이트 루비 보석. 런타임에 다양한 메뉴 선택 항목을 제공하는 방법

나는 다양한 메뉴 항목을 가진 메뉴를 표시하기 위해 루비에서 하이 라인 보석을 사용하고 싶다. 기본적으로 사용자가 디렉토리를 선택하기를 원합니다. 상위 디렉토리에는 여러 개의 디렉토리가있을 수 있습니다. 다음과 같이 내 코드는 다음과 같습니다

@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 내가 평소 온도가 전화를 들어,하지만 현재 내가 가진 : old1 : 내 자신의 디버깅 목적이나 내가 오류를 얻으려면위한 old5.

출력은 :

[ "deletemetest", "old2", "old3", "old4", "TestData 사용", "testy123", "tsty"]

"deletemetest : old2 : old3 : old4 : TestData 사용 : testy123 : tsty "

  1. old1
  2. old5

가 프로젝트를 선택하십시오 액세스 :

기호가 문자열 인 것 같습니다 (주변의 인용 부호로 인해). 이것들을 제거 할 수 있으면 임시 메뉴를 menu.choice 호출의 올바른 형식으로 가져올 수 있습니다.

는 당신이 필요 플랫 운영자에게
+0

당신이 우리에게'@allArchiveDirs의 샘플 출력을 제공 할 수 있습니다 '? – Anthony

+0

코드 p @allArchiveDirs에 줄이 있습니다. 따라서 출력은 게시물에 있습니다. "출력은 다음과 같습니다."다음의 첫 번째 줄입니다. 나중에 하나의 문자열을 만들기 위해 심볼로 매핑되는 문자열 배열입니다. – Juz0

답변

2
당신은 실제로 모든 유형의 변환을 수행 할 필요가 없습니다

입니다

@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: 
+0

위대한 작품과 내가 필요로하는 것은 하나의 변수를 표시하는 것이었다. 나는 지금 스 플랫이하는 것을 읽는다. 다양한 인수를 허용하는 것으로 보이지만 지금은 어떻게 작동하는지 이해하기 위해 온라인에서 더 많은 예제를 살펴볼 것입니다. 다른 모든 유형의 변환을 지정하면 이제는 불필요합니다. 고마워, 안토니. – Juz0

+0

이 방법은 효과가 있지만 실제로는 이해할 수 없습니다. highline gem의 menu.choices에 대한 인수는 기호 여야합니다. Splatting은 캐리지 리턴이있는 문자열 목록을 만드는 것으로 보입니다. 보이지 않는 심볼 .... 그리고 아직 작동합니다 .... – Juz0

+0

splat 연산자는 함수에 전달 된 배열을 압축 해제하여 각 요소가 개별 매개 변수로 함수에 전송되도록합니다. – Anthony