我不知道它是否正常"但每当我想在语句中使用我的变量时,我需要将它们转换为整数/浮点数,即使我将它们声明为整数/浮点数。我做错了什么或者只是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
答案 0 :(得分:1)
使用
MyModel.packs[1].reduction.class
在你的调试中,ruby没有类型,几乎所有东西都是一个对象,包括数字。