Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
190 views
Welcome To Ask or Share your Answers For Others

1 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)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...