0

配列メンバー (浮動小数点数) で計算を行っています。タイプは正しいようです。それでも奇妙なエラーが発生します。nil価値はまったくありません。このエラーは何ですか?

nil can't be coerced into Float

ステップ1

newFront = [412.5, 312.5]
@direction = [1.0, 0.0]
@length = 50.0
retRear = [newFront[0] - (@direction[0] * @lenght), newFront[1] - (@direction[1] * @lenght)]
# => TypeError: nil can't be coerced into Float
#   from (irb):13:in `*'
#   from (irb):13
#   from /usr/bin/irb:12:in `<main>'

ステップ2

newFront[0].class # => Float
@direction[0].class # => Float
@length.class # => Float

ステップ 3

nfx = Float(newFront[0]) # => 412.5
dx = Float(@direction[0]) # => 1.0
nfy = Float(newFront[1]) # => 312.5
dy = Float(@direction[1]) # => 0.0
@l = 50.0
retRear = [nfx - (dx * @l), nfy - (dy * @l)] # => [362.5, 312.5]

それが私が欲しいものです。Ruby は、配列を Float 演算にまったく使用できないと言いたいのでしょうか? また、1 つの式と同じように書き換えても失敗します。

retRear = [Float(newFront[0]) - (Float(@direction[0]) * Float(@lenght)), Float(newFront[1]) - (Float(@direction[1]) * Float(@lenght))]
# => TypeError: can't convert nil into Float
#   from (irb):78:in `Float'
#   from (irb):78
#   from /usr/bin/irb:12:in `<main>'
4

3 に答える 3

2

@lenghtの代わりに- というタイプミスがあり@lengthます。

于 2013-04-10T17:51:30.520 に答える
1

nil はタイプミスによるものです。@length は 50 に設定されていますが、変数 @length には値が設定されていません ("h" と "t" が入れ替わっていることに注意してください)。

于 2013-04-10T17:50:18.657 に答える
1

@WallyAltman が指摘したように、綴りが間違っ@lengthているため、nil.

私はこのようにします、ところで:

new_front = [412.5, 312.5]
@direction = [1.0, 0.0]
@length = 50.0
ret_rear = new_front.zip(@direction).map do |front, dir|
  front - dir * @length
end
# => [362.5, 312.5]
于 2013-04-10T17:48:47.400 に答える