Ruby on Rails - Float变量IF语句

时间:2014-11-02 15:15:24

标签: ruby-on-rails ruby types integer

我不知道它是否正常"但每当我想在语句中使用我的变量时,我需要将它们转换为整数/浮点数,即使我将它们声明为整数/浮点数。我做错了什么或者只是Ruby的工作方式?感谢

例如,我的声明:

  Struct.new("Pack", :id, :qty, :promo, :reduction)
  @@pack1 = Struct::Pack.new(1, 10, 0, 0.1)
  @@pack2 = Struct::Pack.new(2, 25, 0, 0.1)
  @@pack3 = Struct::Pack.new(3, 50, 5, 0.1)
  @@pack4 = Struct::Pack.new(4, 100, 10, 0.1)

  def self.packs
    [0, @@pack1, @@pack2, @@pack3, @@pack4]
  end

让我们以reduction为例。当我使用它们时,即使我将它们声明为0.1而没有" ",它也不会被识别为浮点数。 在IF语句中不输入

def my_function(pack_id)
  reduction = MyModel.packs[pack_id].reduction
  Rails.logger.debug reduction   # Print 0.1
  if reduction > 0.0
    # Some stuff
  end
end

IF声明正在发挥作用:

def my_function(pack_id)
  reduction = MyModel.packs[pack_id].reduction.to_f
  Rails.logger.debug reduction   # Print 0.1
  if reduction > 0.0
    # Some stuff
  end
end

有关信息:

2.1.3 :001 > MyModel.packs
 => [0, #<struct Struct::Pack id=1, qty=10, promo=0, reduction=0.1>, #<struct Struct::Pack id=2, qty=25, promo=0, reduction=0.1>, #<struct Struct::Pack id=3, qty=50, promo=5, reduction=0.1>, #<struct Struct::Pack id=4, qty=100, promo=10, reduction=0.1>] 
2.1.3 :002 > MyModel.packs[1].reduction
 => 0.1 
2.1.3 :003 > MyModel.packs[1].reduction.type
NoMethodError: undefined method `type' for 0.1:Float

编辑:

这里的主要区别是,我现在无法解释原因。 当我的应用程序运行时:

Rails.logger.debug MyModel.packs[1].reduction.class # Fixnum

在rails控制台中:

2.1.3 :012 >   MyModel.packs[1].reduction.class
 => Float

1 个答案:

答案 0 :(得分:1)

使用

MyModel.packs[1].reduction.class

在你的调试中,ruby没有类型,几乎所有东西都是一个对象,包括数字。