Codes316 Codes316 - 2 months ago 9
Ruby Question

How to compare two instance variables from the same class in Ruby?

There is a class called DNA. a variable called nucleotide gets initialized. In the class the length of the nucleotide is found, two different nucleotides are checked to see if they are equal, and the hamming distance is displayed. '

My problem is Ruby only interprets one instance of nucleotide. How do I compare nucleotide to other nucleotides that get created?

class DNA
def initialize (nucleotide)
@nucleotide = nucleotide
end
def length
@nucleotide.length
end
def hamming_distance
puts @nucleotide == @nucleotide
end
end

dna1 = DNA.new("ATTGCC")
dna2 = DNA.new("GTTGAC")
puts dna1.length
puts dna2.length

puts dna1.hamming_distance(dna2)


An example of how I'm trying to make the program work:

dna1 = DNA.new('ATTGCC')
=> ATTGCC
>> dna1.length
=> 6
>> dna2 = DNA.new('GTTGAC')
=> GTTGAC
>> dna1.hamming_distance(dna2)
=> 2
>> dna1.hamming_distance(dna1)
=> 0


The problem is Ruby does not accept the second parameter dna2 when applied in the hamming_distance method

Answer

You need to make nucleotide an accessible field. In this example, I've made it protected, but you could make it public.

class DNA
  def initialize(nucleotide)
    @nucleotide = nucleotide
  end

  def length
    @nucleotide.length
  end

  def hamming_distance(other)
    self.nucleotide #=> this nucleotide
    other.nucleotide #=> incoming nucleotide
  end

  protected

  attr_reader :nucleotide
end

Then use it like:

one = DNA.new("ATTGCC")
two = DNA.new("GTTGAC")

one.hamming_distance(two)
Comments