代码之家  ›  专栏  ›  技术社区  ›  Aditya Mukherji

在Ruby中将空字符串转换为nil

  •  23
  • Aditya Mukherji  · 技术社区  · 16 年前

    我有一个字符串叫做 word infinitive 以致
    word.infinitive

    if word.infinitive == ""
          return word
    else return word.infinitive
    

    (word.infinitive or word)
    

    但既然没有,我就不能利用短路或短路
    理想情况下,我想要
    1) 我可以很容易地嵌入到其他代码中的单个表达式

    3) 不向我的代码中添加任何自定义gem或插件

    6 回复  |  直到 16 年前
        1
  •  126
  •   David Phillips    14 年前

    presence 方法转换空的(或 blank? )串连 nil

    word.infinitive.presence || word
    

    请注意,您可以在rails之外轻松使用ActiveSupport:

    require 'active_support/core_ext/object/blank'
    
        2
  •  11
  •   Joshua    15 年前

    您可以使用类似的正则表达式 this article suggests

    (word.infinitive[/.+/m] or word) #Fancy way to convert "" to nil
    
        3
  •  7
  •   Josh Lee ZZ Coder    16 年前

    如果您不为蒙基补丁和滥用语法感到羞耻,那么这将起作用:

    class String
      def | x
        if empty? then x else self end
      end
    end
    

    word.infinitive | word ,如果你问我的话,它实际上相当自然地扫描。

    然而,我认为更好的办法是修改不定式方法,或者添加一个返回单词不变的版本。

    [word.infinitive, word].find {|x| not x.empty?}
    
        4
  •  6
  •   asplake    16 年前

    做正确的事情-修复不定式,使其返回nils而不是空字符串,或者如果您真的无法触摸它,则使用您自己的界面将其包装。

        5
  •  5
  •   pangel    15 年前

    class String
      def squash
        self.empty? ? nil : self
      end
    end
    

    puts var.squash or "default text"
    

    我不是以英语为母语的人,所以我不知道 这是最好的词。有没有一个词更能表达“只有空了才变成零”的意思?

        6
  •  4
  •   rampion    16 年前

    可以使用三元运算符 (boolean ? true-val : false-val) 具有 String#empty?

    return word.infinitive.empty? ? word : word.infinitive
    

    return (inf = word.infinitive).empty? ? word : inf
    

    你也可以考虑增加一些。 memoization 到您的代码。

    推荐文章