4

这是红宝石功能:

def long_reference_name
  if suite?
    "#{recursive_access} #{recursive_view} "
  else
    ""
  end + reference_name
end

我不明白这是什么意思:

end + reference_name

4

3 回答 3

12

不是end + reference_name,是<previous expression> + reference_name,在哪里<previous_expression>

if suite?
 "#{recursive_access} #{recursive_view} "
else
""
end

因为块是 Ruby 中具有值的表达式。

换句话说,您有"#{recursive_access} #{recursive_view} " + reference_name"" + reference_name,具体取决于 的值suite?

于 2013-06-23T21:34:25.887 回答
4

这是+if-else-end语句结果调用的方法。

作为一个例子,见下文:

m = if true  
  "abc"
else
  "xyz"
end + "mm" 
# => "abcmm"
于 2013-06-23T21:34:57.360 回答
2

其他答案解释了如何阅读它。他们没有检查模仿不是一件好事。

可以使用以下方法干净地为条件测试的结果添加一些内容:

def foo(s)
  ret = if (s == "something")
    'some text'
  else
    ''
  end
  ret + reference_name
end

这是额外的一行,同样快,但更容易理解。

从技术上和句法上讲,另一种方式是可行的,但它不是惯用的,并且会影响维护。

于 2013-06-24T03:41:43.907 回答