0
def self.jq_column_models
  COLUMN_NAME.collect {|x|
    {:name => x.to_s, :width => 80, :format => 'integer' if x.is_a?(Fixnum)}
  }
end

when is only integer型:format => 'integer' if x.is_a?を追加するコードを書きました。しかし、それはコンパイルされていません。このコードをルビでどう表現するか。:format|x|

4

5 に答える 5

3

タップを使用できます(yield self; self):

  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
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 に答える
1

:formatを別のステートメントに追加するだけです。

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

わかりましたので、2 つのステートメントを使用する必要があります。

hash = {:name => x.to_s, :width => 80}
hash[:format] = 'integer' if x.is_a? Fixnum
于 2012-06-18T10:26:28.333 に答える