如果任一字符串的长度超过 X 个字符,则为 True



我有一个实例变量@long_name,以便在用户的名字或姓氏超过 X 个字符(在本例中为 18)时,我可以有条件地应用模板样式。

 @long_name = current_user.first_name.length > 18

工作正常,但是

 @long_name = (current_user.first_name.length || current_user.last_name.length) > 18

不行。检查"A 是否比 X 长或 B 是否比 X 长"的正确方法是什么?

这是使用Enumerable#any?的另一种方法,并减少最少的重复

[current_user.first_name,current_user.last_name].any?{ |name| name.length > 18} 

另外,由于您想将其用作条件,因此我只会将其作为方法

def long_name?(*names)
  names.any?{ |name| name.length > 18 }
end

然后你可以打电话long_name?(current_user.first_name,current_user.last_name)

这也将允许您在需要将比较值从 18 更改为其他数字时更轻松地重用它。现在您只需要更改一次。

您需要

在表达式的两半中包含>18

@long_name = (current_user.first_name.length > 18 || current_user.last_name.length > 18)

在你的回答中,Ruby 试图在检查>18部分之前评估current_user.first_name.length || current_user.last_name.length,这没有意义。

另一种选择可能是使用和长度数组

lenghts    = [current_user.first_name.length,
              current_user.last_name.length
             ]
@long_name = lenghts.max > 18

相关内容

最新更新