1.我找不到一种优雅的方式来编写这段代码:
if array.empty?
# process empty array
else
array.each do |el|
# process el
end
end
我希望有一个循环,而不是编写两次array
。我读了this,但没有足够好的解决方案。
我实际上是在一个HAML模板中。同样的问题。
- if array.empty?
%p No result
- else
%ul
- array.each do |el|
%li el
发布于 2013-09-13 02:58:57
关于?
array.each do |x|
#...
puts "x",x
end.empty? and begin
puts "empty!"
end
发布于 2014-01-05 12:48:41
我在HAML (不是普通的Ruby)中看到的最干净的方式是这样的:
- array.each do |item|
%li
= item.name
- if array.empty?
%li.empty
Nothing here.
正如其他答案所提到的,不需要else
子句,因为它已经隐含在其他逻辑中。
即使您可以在一行中执行每个-else操作,也无法实现您试图实现的标记(如果是array.empty,则为<p>
?;如果是array.present,则为<ul>
?)。此外,你在问题中展示的HAML是讲述代码背后故事的最好方式,这意味着它对其他开发人员来说更具可读性和可维护性,所以我不知道你为什么要重构成更神秘的东西。
发布于 2013-05-31 23:18:16
我认为没有比这更优雅或更具可读性的方法了。任何以某种方式将迭代与条件组合在一起的方法都只会导致黑盒代码,这意味着:条件最有可能隐藏在Array
扩展中。
https://stackoverflow.com/questions/16860310
复制相似问题