0
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?来添加:formatwhen |x|is only integer 类型。但它没有被编译。你如何用 ruby​​ 来表达这段代码?

4

5 回答 5

3

您可以使用点击(屈服自我;自我):

  COLUMN_NAME.collect {|x|
    {:name => x.to_s, :width => 80}.tap{|y| y[:format] ='integer' if x.is_a?(Integer)}
  }
于 2012-06-18T10:27:34.963 回答
1

只需:format在另一个语句中添加:

h = {:name => x.to_s, :width => 80}
h[:format] = 'integer' if x.kind_of? Integer
于 2012-06-18T10:22:28.930 回答
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
于 2012-06-18T10:34:53.760 回答
0

好的,所以你必须使用两个语句:

hash = {:name => x.to_s, :width => 80}
hash[:format] = 'integer' if x.is_a? Fixnum
于 2012-06-18T10:26:28.333 回答
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是合法值(通常不应该),这将不起作用。

于 2012-06-18T12:05:13.097 回答