Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby中比较同一类中的两个实例变量?_Ruby - Fatal编程技术网

如何在Ruby中比较同一类中的两个实例变量?

如何在Ruby中比较同一类中的两个实例变量?,ruby,Ruby,有一类叫做DNA。一个名为nucleode的变量被初始化。在这个类中,找到核苷酸的长度,检查两个不同的核苷酸是否相等,并显示汉明距离。” 我的问题是Ruby只解释一个核苷酸实例。我如何将核苷酸与其他产生的核苷酸进行比较 class DNA def initialize (nucleotide) @nucleotide = nucleotide end def length @nucleotide.length end def hamming_distance

有一类叫做DNA。一个名为nucleode的变量被初始化。在这个类中,找到核苷酸的长度,检查两个不同的核苷酸是否相等,并显示汉明距离。”

我的问题是Ruby只解释一个核苷酸实例。我如何将核苷酸与其他产生的核苷酸进行比较

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)
我如何努力使程序正常工作的一个例子:

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

问题是Ruby在应用于hamming_距离方法时不接受第二个参数dna2

如果您想让它工作

dna1.hamming_distance(dna2)
然后您需要通过访问器方法(
attr\u reader
)公开访问
@nucleotide
),然后简单地比较
dna1.nucleotide
dna2.nucleotide

hamming_distance
的实现可能如下所示:

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

你需要使核苷酸成为一个可访问的字段。在本例中,我已将其设置为受保护,但您可以将其公开

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
然后像这样使用它:

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

one.hamming_distance(two)