我想在Sinatra中使用一個範圍來迭代。Sinatra:幫手和紅寶石範圍
,當我嘗試像
helpers do
def iteration
(1..6).each do |x|
x
end
end
end
,並呼籲從我的應用程序的幫手,它打印1..6
,如果我改變
(1..6).to_a do #...
其打印123456
是否正常?還是我需要在我的應用程序中需要更多的東西才能夠使用範圍?
我想在Sinatra中使用一個範圍來迭代。Sinatra:幫手和紅寶石範圍
,當我嘗試像
helpers do
def iteration
(1..6).each do |x|
x
end
end
end
,並呼籲從我的應用程序的幫手,它打印1..6
,如果我改變
(1..6).to_a do #...
其打印123456
是否正常?還是我需要在我的應用程序中需要更多的東西才能夠使用範圍?
你還是會需要調用each
:
(1..6).to_a.each do ...
在您的輔助方法,你實際上並不做什麼。方法iteration
將返回方法中最後一條語句的結果; each
返回傳遞給它的參數,這就是顯示的內容。
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
我試圖找到一種方法來從Sinatra助手輸出html代碼(可以使用markaby,但我必須等待IT dpt決定他們是否安裝它)。所以我想循環遍歷一個範圍來輸出標記。但不能讓這件事在Sinatra工作。雖然在irb罰款。 –
或者,使用Sinatra中的模板作爲你的答案。 – coolesting
我試圖找到一種方式來輸出HTML代碼與西納特拉一個幫手(可以使用引入markaby但我必須等待IT部門決定是否安裝它)。所以我想循環遍歷一個範圍來輸出標記。但無法讓這件事在Sinatra中奏效。雖然在irb罰款。
這到底是我做過什麼
def tag_iterator
(1..6).map do |x|
"<p>#{x}</p>"
end
end
在模板:
__END__
@@index
%h1= @title
.test
%div= "#{tag_iterator}"
而現在通過正常範圍內循環。我猜Ruby對我來說太神奇了,我可以花幾個小時來猜測事情的工作方式:^ P
'each'純粹是爲了副作用而執行的(例如,用'puts'打印到屏幕上),並且您的原始文章中沒有任何內容。另一方面,'map'用於收集塊返回的值(因此爲其收集'collect'別名),所以你最終得到你想要的結果。沒有涉及任何種類的魔法。順便說一句:你最初的例子打印了'1..6',因爲'each'返回它被調用的對象。 –
感謝您的澄清:) –
不客氣! :-)在線有一些優秀的Ruby資源,比如RubyLearning,Code School等,也許你想用其中的一個來開始你的Ruby學習。 –
我知道它什麼都不做,我只是在測試這個東西。我嘗試過to_a,因爲Sinatra似乎並不瞭解每一個範圍,我想檢查這是否屬實。令我驚訝的是它沒有對每個數組的調用迭代數組。 –