0

我收到以下哈希:

my_hash = {a:(1/20), b:(1/26)}

但是当我看到哈希时,我得到以下信息:

irb(main):019:0> my_hash = {a:(1/20), b:(1/26)}
=> {:a=>0, :b=>0}
irb(main):020:0> my_hash
=> {:a=>0, :b=>0}

如您所见,它转换为整数 (0)

我怎样才能以 Rational 的身份离开,或浮动以便我可以排序my_hash.sort_by {|key, value| value}

4

2 回答 2

2

RationalRuby 中文字的语法是<numerator>/<denominator>r,例如1/2r23/42r。你所拥有的只是整数除法:1除以20is 0

my_hash = { a: 1/20r, b: 1/26r }
#=> { :a => (1/20), :b => (1/26) }

看起来您可能是 Smalltalk 或 Scheme 程序员,但在这些语言中情况有所不同:它们从一开始就有理性文字,Ruby 只是后来才得到它们,因此它需要一个显式注释(r后缀)来告诉理性文字除了整数除法;否则你会破坏现有的程序。

于 2017-05-12T22:17:50.480 回答
1

定义如下:

my_hash = {a:(1.0/20.0), b:(1.0/26.0)}

或者:

my_hash = {a:(1.to_f/20.to_f), b:(1.to_f/26.to_f)}
于 2017-05-12T22:16:17.347 回答