def self.jq_column_models
COLUMN_NAME.collect {|x|
{:name => x.to_s, :width => 80, :format => 'integer' if x.is_a?(Fixnum)}
}
end
当:format => 'integer' if x.is_a?
只是整数类型时,我编写了代码:format
来添加|x|
。但它没有编译。你如何用ruby表达这段代码?
答案 0 :(得分:3)
您可以使用tap(自我产生;自我):
COLUMN_NAME.collect {|x|
{:name => x.to_s, :width => 80}.tap{|y| y[:format] ='integer' if x.is_a?(Integer)}
}
答案 1 :(得分:1)
只需在另一个声明中添加:format
:
h = {:name => x.to_s, :width => 80}
h[:format] = 'integer' if x.kind_of? Integer
答案 2 :(得分:1)
def self.jq_column_models
COLUMN_NAME.each_with_object([]) do |x,memo|
h = {:name => x.to_s, :width => 80}
h[:format] = 'integer if x.is_a?(Fixnum)
memo << h
end
end
答案 3 :(得分:0)
好的,所以你必须使用两个语句:
hash = {:name => x.to_s, :width => 80}
hash[:format] = 'integer' if x.is_a? Fixnum
答案 4 :(得分:0)
只是为了补充其他答案,一个不涉及陈述的功能性解决方案。首先,将此通用方法添加到扩展库:
class Hash
def with_values
select { |k, v| block_given? ? yield(v) : v }
end
end
现在使用它:
{:name => x.to_s, :width => 80, :format => ('integer' if x.is_a?(Fixnum))}.with_values
当然,如果nil
是合法的价值(通常不应该这样),这将无效。