繁体   English   中英

Ruby-未初始化的常量

[英]Ruby - uninitialized constant

我有这4个类,代码很简单,但是当我尝试生成时,它返回一个错误,例如

in `<main>': uninitialized constant PruebasUnitarias (NameError)

代码是这样,我不知道出什么问题了,我以为是因为需求,但我将所有文件都放在一个文件中,仍然崩溃。

class Complejo
  def initialize (real, imaginario)
    @real = real
    @imaginario = imaginario
  end

  def sumar (complejo)
    @real = @real + complejo.real
    @imaginario = @imaginario + complejo.imaginario
  end
  attr_reader :real, :imaginario
end

class Prueba
  def assertCierto(valor)
    return valor
  end

  def assertFalso(valor)
    return valor
  end

  def assertIgual(num1, num2)
    if(num1 == num2)
      return true
    end
    return false
  end

  def assertDistinto(num1, num2)
    if(num1 != num2)
      return true
    end
    false
  end

  def assertNil param
    if (param == nil)
      return true
    end
    false
  end

  def assertContiene(param1, param2)
    param1.include?(param2)
  end

end

class PruebasUnitarias::Prueba
  def run
    metodos = self.methods
    if(self.respond_to? :inicializacion)
      self.inicializacion
    end

  end
end

class PruebaComplejo < PruebasUnitarias::Prueba
  def inicializacion
    @c1 = Complejo.new(3,5)
    @c2 = Complejo.new(1,-1)
  end

  def prueba_suma
    @c1.sumar(@c2)
    assertIgual(@c1.real, 4)
    assertIgual(@c1.imaginario, 4)
  end

  def prueba_suma_cero
    @c2.sumar(Complejo.new(0,0))
    assertCierto(@c2.real==1)
    assertCierto(@c2.imaginario==-1)
  end

  def prueba_suma_nula
    @c2.sumar(nil)
    assertIgual(@c2.real, 1)
    assertIgual(@c2.imaginario, -1)
  end

  def imprimir (complejo)
    puts "complejo: #{complejo.real}, #{complejo.imaginario}i"
  end
end

您必须先声明模块,然后才能将类放入其中。 试试这个:

module PruebasUnitarias
  class Prueba
    ...
  end
end
class PruebaComplejo < PruebasUnitarias::Prueba
  ...
end

正如关于编程风格的说明一样,在测试值时,您需要以更简单的方式思考。 考虑以下更改:

def assertCierto(valor)
  valor
end

def assertFalso(valor)
  valor
end

def assertIgual(num1, num2)
  num1 == num2
end

def assertDistinto(num1, num2)
  num1 != num2
end

def assertNil param
  param == nil
end

不必使用if测试来查看某项是否相等,然后返回truefalse 测试本身就是这样做的,因此只需比较这些值,然后让Ruby默认返回结果。

1 == 1 # => true
1 == 2 # => false
1 != 1 # => false
1 != 2 # => true

另外,对方法名称(而不是camelCase)使用snake_case。 ItsAReadabilityThing:

  def assert_cierto(valor)

  def assert_falso(valor)

  def assert_igual(num1, num2)

  def assert_distinto(num1, num2)

  def assert_nil param

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM