2013-12-12 4 views
0

나는 내 응용 프로그램 컨트롤러레일이 출력됩니까?

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 

    def get_mkts(all_idx) 
    mkts = Set.new 
    all_idx.each do |idx| 
     m = decode_index_names(idx) 
     puts m[:mkt] 
     mkts.add(m[:mkt]) 
    end 
    end 


    def decode_index_names(name) 
     mkt = name.split(/[0-9]/)[0] 
     type = get_first_num(mkt); 
     {:mkt => mkt,:type => type} 
    end 

    def get_first_num(str) 
    str[/\d+/] 
    end 
end 

에 다음 코드를 가지고 그리고 난 같은 문자열 배열 입력 해요 : 텍스트를 추출,

["USEQUITIES2tv10", "USEQUITIES2tv15", "USEQUITIES2tv20", "NONUSEQUITIES2tv5", "NONUSEQUITIES2tv10", "NONUSEQUITIES2tv15", "NONUSEQUITIES2tv20", "BONDS2tv5", "BONDS2tv10", "BONDS2tv15", "BONDS2tv20" 
, "ES1", "ES2tv5", "ES2tv10", "ES2tv15", "ES2tv20", "NQ1", "NQ2tv5", "NQ2tv10", "NQ2tv15", "USBONDS2tv5", "USBONDS2tv10", "USBONDS2tv15", "USBONDS2tv20", "GERMANBONDS2tv5", "GERMANBONDS2tv10", "GERMANB 
ONDS2tv15", "GERMANBONDS2tv20", "EQUITIESnBONDS2tv5", "EQUITIESnBONDS2tv10", "EQUITIESnBONDS2tv15", "EQUITIESnBONDS2tv20", "COMMODITIES2tv5", "COMMODITIES2tv10", "COMMODITIES2tv15", "COMMODITIES2tv20", 
"CURRENCIES2tv5"] 

메소드 get_mkts을 통해 루프 예상됩니다 첫 번째 숫자를 tot하고 고유 한 기호 배열을 만듭니다 (그래서 Set을 사용했습니다). 그러나 원본 입력 이외의 다른 출력 방법을 얻을 수 없습니다. 레일 콘솔에서 "m [: mkt] put"의 출력에서 ​​각 루프가 올바른 값을 얻는 것을 볼 수 있습니다. 입력 값 대신 집합 mkts를 반환하는 방법을 모르겠습니다. 어떤 아이디어?

답변

2

return을 사용하지 않으면 Ruby 메서드가 마지막 명령문의 결과를 반환합니다. 귀하의 경우에는 each이고 그 이유는 입력을 되 찾는 것입니다. 당신이 뭔가를 할 수 있습니다

def get_mkts(all_idx) 
    mkts = Set.new 
    all_idx.each do |idx| 
    m = decode_index_names(idx) 
    puts m[:mkt] 
    mkts.add(m[:mkt]) 
    end 
    mkts 
end 

이것은 mkts 대신 all_idx의 설정으로 돌아갑니다.

+0

확인 아 그 시간의 낭비 덕분에 롤 – jhlu87

0

다시 쓸 수있는 방법이 있습니다

def get_mkts(all_idx) 
    all_idx.map { |idx| decode_index_names(idx) }.uniq 
end 

더 rubyish을 보이는 그 짧고 청소기

+0

이하지 않는 것을 .. 너무 간단했다 decode_index_names의 출력이 두 항목 해시이고 출력이 해시의 첫 번째 항목을 그룹화하기 때문에 실제로는 꽤 효과가 있습니다. – jhlu87

관련 문제