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