这就是我现在所拥有的--对于它正在做的工作来说,它看起来太冗长了。
@title = tokens[Title].strip! || tokens[Title] if !tokens[Title].nil?
假设tokens是通过拆分CSV行获得的数组。现在,像这样的函数!吃吧!et.如果字符串未修改,则全部返回nil
"abc".strip! # => nil
" abc ".strip! # => "abc"
如果它包含额外的前导空格或尾随空格,而不创建副本,那么Ruby的说法是什么?
如果我想做tokens[Title].chomp!.strip!
,我会变得更丑陋
发布于 2009-06-16 11:44:50
没有必要同时使用strip和chomp,因为strip还会删除尾随回车符--除非您更改了默认的记录分隔符,而这正是您要处理的内容。
Olly的答案已经有了在Ruby中做这件事的标准方法,但是如果你发现自己经常做这件事,你总是可以为它定义一个方法:
def strip_or_self!(str)
str.strip! || str
end
给予:
@title = strip_or_self!(tokens[Title]) if tokens[Title]
还要记住,如果标记为nil,if语句将阻止@title
被赋值,这将导致它保留其先前的值。如果你想或者不介意@title
总是被赋值,你可以将校验移到方法中,进一步减少重复:
def strip_or_self!(str)
str.strip! || str if str
end
作为另一种选择,如果你喜欢冒险,你可以在String本身上定义一个方法:
class String
def strip_or_self!
strip! || self
end
end
给出其中之一:
@title = tokens[Title].strip_or_self! if tokens[Title]
@title = tokens[Title] && tokens[Title].strip_or_self!
发布于 2015-12-01 20:18:52
如果您在需要以下代码后想使用另一种方法:
( str.strip || str ).split(',')
这样,您可以在剥离后仍可执行某些操作:)
发布于 2009-06-16 11:33:02
我认为您的示例是一种明智的方法,尽管您可以将其稍微简化为:
@title = tokens[Title].strip! || tokens[Title] if tokens[Title]
或者,您可以将其放在两行中:
@title = tokens[Title] || ''
@title.strip!
https://stackoverflow.com/questions/1000688
复制相似问题