我想在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似乎并不了解每一个范围,我想检查这是否属实。令我惊讶的是它没有对每个数组的调用迭代数组。 –