【问题标题】:Shorthand for "return x if x" in RubyRuby 中“return x if x”的简写
【发布时间】:2012-06-03 23:30:51
【问题描述】:

我喜欢 Ruby 的一点是,您可以用尽可能短的方式表达事物。

我知道分配时可以做到

x ||= a
# instead of
x = a unless x
# which is
x = x || a

return 有模拟形式吗?

# instead of
return x if x

我只想“说”一次xThis question 询问只是返回(什么都没有),但是当返回 void 以外的东西时,我不知道该怎么做。

【问题讨论】:

  • 用简单的x 替换return x if x 有什么问题?
  • @Zabba 不一定是最后一句话
  • 可能我的数学功底变差了,但你不是已经一语成谶了吗?
  • 敏锐的观察力,@Jorg;我将其更正为“速记”。

标签: ruby shorthand


【解决方案1】:

我几乎可以肯定,您的第二个示例不存在简写——也不能在不修改 Ruby 语法的情况下编写简写——因为它不是一个足够常见的习语。对不起,兄弟,但看起来你将不得不在这个问题上变得冗长。 (虽然,真的,就冗长而言,这个并不是那么糟糕。)

(也请注意,第一个例子不太对:x ||= a 等价于x = x || a,也可以表示为x = a unless x。)

【讨论】:

  • 你说得对,我刚刚纠正了它。既然您“几乎可以肯定”,我会稍等片刻并承认这是unless 其他人的答案。所以answer = yours; answer ||= new_answer,或者我应该说return new_answer if new_answer; yours; ;)
【解决方案2】:

如果它是块代码中的最后一条语句,则可以省略返回。

例子

irb(main):002:0> def b(c)
irb(main):003:1>   c if c
irb(main):004:1> end
=> nil
irb(main):005:0> b(4)
=> 4
irb(main):006:0> b(nil)
=> nil
irb(main):007:0> b(true)
=> true
irb(main):008:0> b(false) # TADA!!!
=> nil

【讨论】:

  • 如果这是我最后的声明,我可以肯定省略 return,但我的意图是只说一次 c。就我而言,我也想涵盖非最后陈述!
猜你喜欢
  • 2014-11-20
  • 2021-06-01
  • 2016-07-07
  • 2019-03-21
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多