2011-07-22 54 views
1

为什么这不是一个有效的操作?Ruby未定义方法'+'为零: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. 方法定义后的Parens是可选的,而不是惯用的ruby。

  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()函数? '&'和':'是什么意思?对不起,我是Ruby新手。 –

+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是一个局部变量的名称,该名称在看什么,我贴我忘了,包括以后。我的错。 –

相关问题