Ruby初学者需要一只手

时间:2016-05-25 10:22:40

标签: ruby

我是红宝石的初学者。
我试图运行此代码,它显示运行时错误。
这段代码出了什么问题?

class Calc
  attr_accessor :val1, :val2
  def initialize (val1,val2)
    @val1=val1
    @val2=val2
  end
end
a=Calc.new(2,3)
a.add_two_numbers(3)

def add_two_numbers(v3)
  return @val1+@val2+v3
end

2 个答案:

答案 0 :(得分:5)

方法add_two_numbers未在类Calc上定义,但您正在使用它,就好像它一样。这就是问题所在。

我认为你有NoMethodError

更新:正如评论中指出的那样,默认情况下,该方法在Object类上定义,然后自动继承到所有类,但作为私有。这实际上意味着您将收到错误,指出正在调用私有方法。修复方法保持不变,因为总体问题是如何定义类及其方法的混淆。

修复方法是通过将类放在类体中来定义类的方法。

class Calc
  attr_accessor :val1, :val2
  def initialize (val1,val2)
    @val1=val1
    @val2=val2
  end

  def add_two_numbers(v3)
    return @val1+@val2+v3
  end
end

答案 1 :(得分:0)

所以你要在一个类之外定义一个方法(这是我们不想要的)

def add_two_numbers(v3)
 return @val1+@val2+v3
end

您始终希望确保将您的课程和逻辑视为组织方面的两个独立实体。我的意思是:

您的课程在一个文件中(calc.rb):

 **class Calc
      attr_accessor :val1, :val2
      def initialize (val1,val2)
        @val1=val1
        @val2=val2
     end
      def add_two_numbers(v3)
        return @val1+@val2+v3
      end
   end**

您在另一个文件中访问calc.rb的逻辑。使用require relative来访问类文件中的逻辑:

require_relative"/calc.rb"
a=Calc.new(2,3)
a.add_two_numbers(3)

提示:当我学习ruby时,最好的方法是将它们保存在两个单独的文件中以便更好地组织。这样你就知道你没有在课堂外的某个方法。这样可以避免“无方法错误”