首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby最佳实践:如果不为空,则在一个运算符中执行每个操作

Ruby最佳实践:如果不为空,则在一个运算符中执行每个操作
EN

Stack Overflow用户
提问于 2013-05-31 23:00:08
回答 7查看 13.7K关注 0票数 21

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

代码语言:javascript
复制
if array.empty?
  # process empty array
else
  array.each do |el|
    # process el
  end
end

我希望有一个循环,而不是编写两次array。我读了this,但没有足够好的解决方案。

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

代码语言:javascript
复制
- if array.empty?
  %p No result
- else
  %ul
  - array.each do |el|
    %li el
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-09-13 02:58:57

关于?

代码语言:javascript
复制
array.each do |x|
  #...
  puts "x",x
end.empty? and begin
  puts "empty!"
end
票数 33
EN

Stack Overflow用户

发布于 2014-01-05 12:48:41

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

代码语言:javascript
复制
- array.each do |item|
    %li
        = item.name
- if array.empty?
    %li.empty
        Nothing here.

正如其他答案所提到的,不需要else子句,因为它已经隐含在其他逻辑中。

即使您可以在一行中执行每个-else操作,也无法实现您试图实现的标记(如果是array.empty,则为<p>?;如果是array.present,则为<ul>?)。此外,你在问题中展示的HAML是讲述代码背后故事的最好方式,这意味着它对其他开发人员来说更具可读性和可维护性,所以我不知道你为什么要重构成更神秘的东西。

票数 6
EN

Stack Overflow用户

发布于 2013-05-31 23:18:16

我认为没有比这更优雅或更具可读性的方法了。任何以某种方式将迭代与条件组合在一起的方法都只会导致黑盒代码,这意味着:条件最有可能隐藏在Array扩展中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16860310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档