其实就是如何对齐的问题,我一般这么做
post.tags = post.tags.
delete_if(&:nil?).
map{|value| value.sub /^!/,''}.
delete_if(&:empty?)
我大概会写成这样:
post.tags = post.tags.
delete_if(&:nil?).
map{|value| value.sub /^!/,''}.
delete_if(&:empty?)
post.tags = post.tags
.delete_if(&:nil?)
.map{|value| value.sub /^!/,''}
.delete_if(&:empty?)
post.tags = post.tags.some_method
def some_method
delete_if(&:nil?)
.map{|value| value.sub /^!/,''}
.delete_if(&:empty?)
end
#7 楼 @jjym 写成一行也可以,只要你确信不会有麻烦就行,话说我又凑了篇博客 http://fsword.github.com/blog/2012/08/26/lian-shi-diao-yong-de-dai-ma-zen-yao-xie/ #8 楼 @hooopo 也许这能算个例子,说明 IDE 的作用在 DSL 语言中渐渐变得不重要了
好吧 我来 troll 一下
一个表达式里面有四个点是很强的 code smell 了。看你的代码,你是说 tag 为 nil 的,开头!的,空字串都不是有效的 tag。因为你用了 Ruby 里面比较基础的类 String(猜的)来表达 tag 所以就只能依赖 String 的操作来实现这个业务逻辑,就只能把多个方法穿起来
更好的方法是对 tag 的更好封装,在一个 class 里面。然后把逻辑定义在 tag.valid? 里面。这样你的 post.tags 可以按 {|tag| tag.valid?} 来选出合理的 tags. 这样的方法很方便被复用,需要增加或改变什么样的 tag 是 valid 也很容易