简体   繁体   中英

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

If you want this to work...

dna1.hamming_distance(dna2)

Then you need to make @nucleotide publicly accessible via an accessor method ( attr_reader ) and then simply compare dna1.nucleotide and dna2.nucleotide .

Your implementation of hamming_distance might look like this:

def hamming_distance(other_dna)
  # compare nucleotide (ours) with other_dna.nucleotide (theirs)
end

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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