如果给定的块类型是整数,如何在ruby哈希中添加元素?

如果给定的块类型是整数,如何在ruby哈希中添加元素?,ruby,Ruby,我编写了代码:format=>“integer”if x.is|u a?来添加:format当|x |是唯一的整数类型时。但它没有被编译。ruby是如何表达这段代码的?只需在另一条语句中添加:format: 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|u a?
来添加
:format
|x |
是唯一的整数类型时。但它没有被编译。ruby是如何表达这段代码的?

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

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

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

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

好的,那么您必须使用两个语句:

h = {:name => x.to_s, :width => 80}
h[:format] = 'integer' if x.kind_of? Integer

好的,那么您必须使用两个语句:

h = {:name => x.to_s, :width => 80}
h[:format] = 'integer' if x.kind_of? Integer
您可以使用(屈服自我;自我):

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

def self.jq_column_模型
列名称。每个带有对象([])do | x的列,备注|
h={:name=>x.to_s,:width=>80}
h[:format]=“如果x.is_a,则为整数”(Fixnum)
备注
def self.jq_column_模型
列名称。每个带有对象([])do | x的列,备注|
h={:name=>x.to_s,:width=>80}
h[:format]=“如果x.is_a,则为整数”(Fixnum)

备忘只是为了补充其他答案,这是一个不涉及陈述的功能性解决方案。首先,将此通用方法添加到扩展库:

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
现在使用它:

class Hash
  def with_values
    select { |k, v| block_given? ? yield(v) : v }
  end
end

当然,如果
nil
是一个合法的值(通常不应该是这样),这就不起作用了。

只是为了补充其他答案,一个不涉及语句的功能解决方案。首先,将此通用方法添加到扩展库:

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
现在使用它:

class Hash
  def with_values
    select { |k, v| block_given? ? yield(v) : v }
  end
end

当然,如果
nil
是一个合法的值(通常它不应该是这样的),这将不起作用。

我无法理解您真正想要的是什么,但是您缺少
是一个方法的参数。也许你的意思是
x.is\u a?(Fixnum)
…我无法理解你真正想要什么,但是你缺少
is\u a?
方法的参数。也许你的意思是
x.is_a?(Fixnum)
…有没有理由把一个漂亮的
map
转换成一个详细的
带有对象的每个
?(这是一个映射):-)每个带有对象的对象都是冗长但美丽的方法现在我不知道你是认真的还是开玩笑。你的意思是写
xs更好。每个带有对象的对象([]){x,memo | memo好吧,我认为映射不太合适,所以我提出了每个带有对象的解决方案,但现在我认为尤里·巴巴肖夫的解决方案是最好的答案。有什么理由把一个漂亮的
映射
转换成一个冗长的
每个带有对象的对象
?(这就是映射):-)每个带有对象的_都是冗长而美丽的方法现在我不知道你是认真的还是开玩笑的。你的意思是最好写
xs。每个带有对象的_([]){| x,memo | memo |嗯,我认为map不太合适,所以我提出了每个| u的对象解决方案,但现在我认为尤里·巴巴肖夫的解决方案是最好的答案。一个问题:在你的项目中,你会写这个或两行作业+有条件的更新吗?这一个,因为它是railsway一个他的或两行作业+有条件更新?这一个,因为它是一个)