2011-07-22 12 views
1

これは有効な操作ではないのはなぜですか?あなたがタイプミスを持ってRuby未定義のメソッド '+'はnil:NilClass

def get_highest_bar() 
    #convert string to integer array 
    data = @data.split(",") 

    return Integer(data.max) 
end 

#rounds up to nearest factor of 100 
def round_up(n) 
    return 100 if n < 100 
    return (n+50)/100*100 
end 

@axis_range_prefix = "chxr=" 
@y_axis_index = "1" 

#error here: 
axis_range = @axis_range_prefix + [@y_axis_index, "0", highest_bar.to_s()].join(",") 

答えて

3
  1. あなたのget_highest_bar方法でget_メソッド接頭辞は必要ありません。それはJavaの習慣ですね。あなたがそれをhighest_barという名前で呼ばれたという事実は、良い名前が結果を反映していることを証明しています。

  2. メソッド定義後の括弧はオプションであり、慣用句ではありません。

  3. return Integer(data.max)はおそらくあなたの考えをしません。 @dataに "1​​,10,2"が含まれている場合、最大値は2です。これは文字列として比較されるためです。

リライト方法:

def highest_bar 
    @data.split(",").map(&:to_i).max 
end 
+1

ありがとう! Javaの傾向は絶滅します。 '.map(&:to_i)'部分は、リストのすべての値をto_i()関数に渡しますか? '&'と ':'はどういう意味ですか?申し訳ありませんが、私はルビーの新しいです。 –

+0

'.map {| x | x @ to_i} ' –

+0

' @ data.split( "、")。map(&:to_i).max'を実行しようとしたとき '間違った引数の型シンボル(予想されるProc)' –

0

highest_barは未定義です。 get_highest_bar()に電話する必要があります。私。

axis_range = @axis_range_prefix + [@y_axis_index, "0", get_highest_bar.to_s()].join(",") 
+0

highest_barは私が投稿何を見た後、私は含めるのを忘れて、ローカル変数の名前です。私の間違い。 –

関連する問題