【发布时间】:2019-11-16 05:42:27
【问题描述】:
所以写这个的标准方法似乎是array.include?(object)。但是,与 object.in(array) 相比,我发现它更难快速阅读和理解。 ruby 中有这样的东西吗?
我刚刚再次点击的示例是(user_role 是一个字符串,allowed_user_roles 是一个字符串数组):
allowed_user_roles.include?(user_role)
我知道这可能是个人喜好,但我发现它更容易阅读和理解。
user_role.in(allowed_user_roles)
【问题讨论】:
-
一个集合包含对它持有的对象的引用,反之亦然。一个对象通常不知道它包含在某个地方。因此,您说
ary.index(obj),而不是obj.index_within(ary)。或'ruby'.start_with?('ru')而不是'ru'.prefix_of?('ruby')。在您的示例中,该数组可能包含另一个具有相同字符的字符串,即不同的对象。所以你问的是字符串 "hey string,这个数组中是否还有另一个字符串看起来像你?" 而不是 "hey 数组,你是否包含一个等于这个的字符串?”。对我来说,前者似乎有点奇怪。 -
有点奇怪,但读起来很棒:
if str.in? names then...:) -
我发现它像 object.in?(array) 一样更具可读性和英文。尤其是在 if 语句中,我发现 if object.in?(array) 方式比 if array.include?(object) 更容易理解。只是个人喜好,虽然真的。这也可能取决于上下文。
-
@mrzasa, ...或
if str.in? name then...。 -
@Andrew 它看起来真的很不错。但对我来说,
needle.in?(haystack)之类的东西意味着针知道它是否在大海捞针中。它只需要说 yes 或 no,即我希望得到即时响应。而haystack.include?(needle)听起来已经是一项乏味的任务。如果没有接收器,那将是一个不同的故事。如果in?是一个运算符,那么obj in? collection(没有点,不指向obj)将是一个更普遍的问题,并且可能是collection.include?(obj)的语法糖。正如你所说,这可能是个人喜好。