2011-11-02 3 views
0

Sinatra에서 반복 범위를 사용하려고했습니다. 내가Sinatra : 도우미와 루비 범위

(1..6).to_a do #... 

로 변경하는 경우

helpers do 
    def iteration 
    (1..6).each do |x| 
     x 
    end 
    end 
end 

내 응용 프로그램에서 도우미를 호출 같은, 그것은 1..6

를 인쇄 할 때

는 인쇄 123456

정상입니까? 또는 범위를 사용할 수 있으려면 내 앱에서 더 많은 것을 요구해야합니까?

답변

2

당신은 여전히 ​​each를 호출해야 것 : 당신의 도우미 방법에

(1..6).to_a.each do ... 

을 실제로 아무것도하지 않습니다. iteration 메서드는 메서드의 마지막 문 결과를 반환합니다. each은 전달 된 인수를 반환하므로 표시되는 인수가됩니다.

+0

나는 아무것도하지 않는다는 것을 안다. 그냥 테스트하고 있었다. Sinatra가 범위에서 각각을 이해하지 못하는 것처럼 to_a를 시도했는데 이것이 사실인지 확인하고 싶었습니다. 놀랍게도 각 배열을 호출하지 않고 배열을 반복합니다. –

2
helpers do 
    def iteration 
    (1..6).each do |x| 
     x 
     #it dosen't mean output the 123456, this just let the method return a value 1..6 
     #in other words, it still iteras the array in backgroud, 
     #but not outputs in terminal, you can't see it. 

     print x 
     #it prints 123456, really 
    end 
    end 
end 

편집

시나, 당신이 할 수있는 것과 다음

get '/t' do 
    #it will output the 123456 
    body = "" 
    (1..6).each do |x| 
     body << x.to_s 
    end 
    body 
end 
+0

나는 Sinatra (마가비를 사용할 수 있었지만 IT 설치 여부를 결정할 때까지 기다려야 함)와 함께 헬퍼에서 HTML 코드를 출력하는 방법을 찾으려고했습니다. 그래서 마크 업을 출력하는 범위를 반복하고 싶었습니다. 그러나 sinatra에서 일을하게 만들 수 없었다. 그래도 irb에서 괜찮아. –

+0

또는 Sinatra의 템플릿을 답장으로 사용하십시오. – coolesting

0

내가 (markaby를 사용할 수시나와 도우미에서 출력 HTML 코드에있는 방법을 찾기 위해 노력했지만 나는 그것이 설치되어 있는지 아닌지를 IT 부서가 결정할 때까지 기다려야한다.) 그래서 마크 업을 출력하는 범위를 반복하고 싶었습니다. 그러나 sinatra에서 일을하게 만들 수 없었다. 그래도 irb에서 괜찮아.

__END__ 

@@index 
%h1= @title 
.test 
    %div= "#{tag_iterator}" 

그리고 지금은 일반적으로 범위를 통해 반복 :

은 결국 이것은 내가 템플릿에서

def tag_iterator 
    (1..6).map do |x| 
    "<p>#{x}</p>" 
    end 
end 

을 한 것입니다. 루비는 나에게 너무 마술 적이기 때문에 일이 어떻게 작동하는지 짐작할 수있다.^P

+0

'each'는 순전히 부작용 (예 :'puts '을 사용하여 화면에 인쇄)을 위해 실행되며 원래 게시물에는 아무 것도 없습니다. 반면에'map'은 블록이 리턴하는 값을 모으기 위해 사용됩니다 (따라서'collect' 별칭). 그래서 실제로 원하는 결과를 얻습니다. 어떤 종류의 마법도 필요 없습니다. BTW : 원래 예제는'each.6'이 호출 된 객체를 반환하기 때문에'1..6'을 출력했습니다. 설명을위한 –

+0

감사 : –

+0

당신은 환영합니다! :-) RubyLearning, Code School 등의 온라인 Ruby 자료가 있습니다. Ruby 학습을 시작하기 위해 그 중 하나를 사용하고 싶을 수도 있습니다. –