我可以使用条带!和chomp!在Ruby中的一行

时间:2015-05-30 22:53:07

标签: ruby string

我发现strip!chomp!(以及其他类似方法)在字符串未更改时返回nil。这显然禁止将这些方法合并为一行:

s = 'a' # => "a"   
s.strip!.chomp!(',')  
# => NoMethodError: undefined method `chomp!' for nil:NilClass

所以我似乎被迫每行写一个:

s.strip! # => nil  
s.chomp!(',') # => nil  

这是唯一的方法还是我错过了什么?

3 个答案:

答案 0 :(得分:4)

您可以使用这些方法的非变异版本:

TransitionManager

你可以使用分号(但通常味道很差):

class NavigationControllerDelegate: NSObject, UINavigationControllerDelegate {
    let transitionManager = TransitionManager()

    func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        if operation == .Push {
            return transitionManager
        }

        return nil
    }
}

答案 1 :(得分:4)

这看起来像tap可能是一个有用的工具:

s.tap {|t| t.strip!}.chomp!

答案 2 :(得分:0)

 R = /
     ^\s+ # match >= 1 whitespace at the beginning of string
     |     # or
     ,\s*$ # match comma then >= 0 whitespace at the end of the line
     |     # or 
     \s+$  # match >= 1 whitespace at the end of the line
     /x

def clean(s)
  s.gsub!(R,'') || s
end

在以下所有情况中,返回值为"ab",这也是字符串的新值:

clean '  ab  '
clean '  ab,'
clean ' ab,  '
clean 'ab,'
clean 'ab'