Ruby 有没有这样的语法糖?

hexawing · 2013年04月01日 · 最后由 hexawing 回复于 2013年04月08日 · 3696 次阅读
>> %W(aa bb #{true ? nil : "Y"} abc)
["aa", "bb", "", "abc"]

>> %W(aa bb #{false ? nil : "Y"} abc)
["aa", "bb", "Y", "abc"]

但我想返回 ["aa", "bb", "abc"](而不是像第一种那样多一个""),可以吗?

处理下生成的数组不就是了

可以,但不觉得很丑吗?

%W(aa bb #{true ? nil : "Y"} abc).reject(&:empty?)
3 楼 已删除

@small_fish__ 错了。。。这样不科学。。

['aa', 'bb', true ? nil : "Y", 'abc'].compact 这样不就好了么

compact 威武

#8 楼 @ery 我后来还是用了“很丑”的reject(&:empty?),因为%W之后变成的就是""而不是nil……

我习惯 写这样的代码 ['aa', 'bb', 'abc'] 不习惯 写这样的代码 %W(aa bb abc)

我更喜欢这么写

list = ["aa", "bb", "abc"]
list << "Y" if yes

#9 楼 @hexawing 其实我说丑不是指 reject,而是 %W 里面那堆逻辑:)

空格换个位置也可以...

%W(aa bb #{true ? nil : "Y "}abc)

#12 楼 @luikore 你总是给人惊喜...

%W(aa bb #{false ? nil : "Y "}abc) 就不行了

#14 楼 @lifuzho 试了一下,看来高兴早了,再想办法吧

#13 楼 @fsword #14 楼 @lifuzho

看到了... 果然这个地方还是不能卖弄小聪明... 老老实实的写正常代码才对...

@luikore 哈哈 我的小聪明和你反过来 都不好用啊

%W(aa bb #{true ? nil : "Y"} abc).reject!(&:empty?)

#11 楼 @ashchan 因为是在一个用 Prawn 做 PDF 的项目里写的,外面一大堆各种配置,显示 A 列不显示 B 列之类的,分好多if太累了,直接塞一行得了

%(aa bb #{true ? nil : "Y"} abc).split(/\s+/)

#20 楼 @Ddl1st 您这个想法很好,可惜我刚刚好不能用——有一项是“Unit Price”,中间有一个空格的…… %W(aa bb Unit\ Price)转义可以解决空格的问题

需要 登录 后方可回复, 如果你还没有账号请 注册新账号