Ruby最佳实践:如果不是空的,则在一个运算符中执行其他操作

Aug*_*ger 16 ruby haml operators

1.我找不到一种优雅的方式来编写这段代码:

if array.empty?
  # process empty array
else
  array.each do |el|
    # process el
  end
end
Run Code Online (Sandbox Code Playgroud)

我想有一个循环,没有写array两次.我读过这篇文章,但没有足够的解决方案.


2.我实际上是在一个HAML模板中.同样的问题.

- if array.empty?
  %p No result
- else
  %ul
  - array.each do |el|
    %li el
Run Code Online (Sandbox Code Playgroud)

小智 26

关于什么?

array.each do |x|
  #...
  puts "x",x
end.empty? and begin
  puts "empty!"
end
Run Code Online (Sandbox Code Playgroud)

  • 天啊,这就是我爱Ruby的原因! (2认同)

col*_*lin 5

我在HAML(不是普通的Ruby)中看到的最干净的方法是这样的:

- array.each do |item|
    %li
        = item.name
- if array.empty?
    %li.empty
        Nothing here.
Run Code Online (Sandbox Code Playgroud)

正如其他答案所提到的那样,没有必要使用该else条款,因为这已经隐含在其他逻辑中.

即使你可以在一个简洁的行中执行each-else,你也无法实现你想要实现的标记(<p>如果是array.empty?,<ul>如果是array.present?).此外,您在问题中显示的HAML是告诉代码背后故事的最佳方式,这意味着它对其他开发人员更具可读性和可维护性,因此我不知道您为什么要重构为更隐蔽的内容.