什么是';结束+';用ruby';s函数?

什么是';结束+';用ruby';s函数?,ruby,Ruby,这是ruby函数: def long_reference_name if suite? "#{recursive_access} #{recursive_view} " else "" end + reference_name end 我不明白这是什么意思: end+reference\u name它不是end+reference\u name,而是+reference\u name,其中是: if suite? "#{recursive_access} #{re

这是ruby函数:

def long_reference_name
  if suite?
    "#{recursive_access} #{recursive_view} "
  else
    ""
  end + reference_name
end
我不明白这是什么意思:


end+reference\u name

它不是
end+reference\u name
,而是
+reference\u name
,其中
是:

if suite?
 "#{recursive_access} #{recursive_view} "
else
""
end
因为块是Ruby中具有值的表达式


换句话说,您有
“{recursive\u access}{recursive\u view}”或
“+reference\u name
,具体取决于
suite?

的值,这是在
if else end
语句的结果上调用的
+
方法

作为示例,请参见以下内容:

m = if true  
  "abc"
else
  "xyz"
end + "mm" 
# => "abcmm"

其他答案解释了如何阅读它。他们不认为模仿不是一件好事

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

def foo(s)
  ret = if (s == "something")
    'some text'
  else
    ''
  end
  ret + reference_name
end
这是一行额外的,同样快,但更容易理解


从技术上和语法上来说,另一种方法是可行的,但它不是惯用的,这会影响维护

@Konrad Rudolph感谢您的帮助:)…Akash,您应该单击旁边的复选标记将答案标记为已接受。+1,但我必须承认,我个人确实喜欢Ruby中的Perley hacks。perly hacks的问题是,它们会邀请许多其他Perl实践,这些实践共同导致所谓的行噪声。我已经写了很多Perl代码,可能会对它感到厌烦,但总是喜欢可读性而不是晦涩。如果我必须重读一些东西来弄清楚它在做什么,那是在浪费我的时间。