Проблема в том, что одна или несколько переменных в умножении представляют собой строку, которая приводит к ошибке TypeError
, которую вы получаете, например:
'a' * 'b' # '*': no implicit conversion of String into Integer (TypeError)
Если вы хотите подавить ошибкуВы можете вручную конвертировать их в целые числа или числа с плавающей точкой. Это означает, что если строка не имеет числового представления, она вернет 0:
'asd'.to_i # 0
'1'.to_i. # 1
'-9.9'.to_i # -9
'-9.9'.to_f # -9.9
В качестве альтернативы, вы можете обработать присвоение rate
, используя «словарь», который содержит мин. и максимальное значение weight
можно вернуть X
. Создав диапазон от min до max и спросив, включает ли он значение веса, вы можете присвоить ему значение:
dict = {
[-Float::INFINITY, 2] => 0.10,
[2, 10] => 0.20,
[10, 40] => 0.30,
[40, 70] => 0.50,
[70, 100] => 0.75,
[100, Float::INFINITY] => 0.90
}
p dict.find { |(start, finish), _| (start...finish).include?(-42.12) }.last # 0.1
p dict.find { |(start, finish), _| (start...finish).include?(0) }.last # 0.1
p dict.find { |(start, finish), _| (start...finish).include?(1) }.last # 0.1
p dict.find { |(start, finish), _| (start...finish).include?(23) }.last # 0.3
p dict.find { |(start, finish), _| (start...finish).include?(101) }.last # 0.9