未能将实例变量的值从同一类(Ruby)中传递给另一个实例变量

未能将实例变量的值从同一类(Ruby)中传递给另一个实例变量,ruby,methods,instance-variables,Ruby,Methods,Instance Variables,这是我的密码 class Dog attr_accessor :name attr_reader :breed, :age def initialize(name, breed, age) @name = name @breed = breed @age = age @distance_in_kms = [] end def walk(distance_in_kms) @

这是我的密码

class Dog

    attr_accessor :name
    attr_reader :breed, :age

    def initialize(name, breed, age)
        @name = name
        @breed = breed
        @age = age
        @distance_in_kms = []
    end

    def walk(distance_in_kms)
        @distance_in_kms << {distance: distance_in_kms}
    end

    def walked_distance 
       @walked_distance = @distance_in_kms.inject(0) {|sum, hash| sum + hash[:distance]}
    end

    def display_walks
        puts "#{@name} has had #{@distance_in_kms.length} walks and walked #{@walked_distance} kms today:"
        @distance_in_kms.each do |each_walk|
            puts "#{each_walk[:distance]} km"
        end
    end 

    #overriding to_s to print a meaningful representation of a class
    def to_s
        return "Dog: breed-#{@breed} name-#{@name}"
    end
end

doggo = Dog.new("Roy", "Labrador", 8)
doggo.walk(3)
doggo.walk(5)
doggo.walk(1)

puts doggo.name = "Dang"
puts doggo.breed
doggo.display_walks
公里数前的预期值应为9,即一天内每次步行的总和。显然,我用
walked\u distance
方法做了一些错误。我试图将数组
@distance\u(单位:km
的值传递到
@walked\u distance
中,但它不起作用,返回值为零。但是如何解决问题并获得预期结果?谢谢

但是你永远不会调用代码来计算行走距离。在添加新步行时更新它,或者在此处计算总距离(例如,通过调用
步行距离


但是你永远不会调用代码来计算行走距离。添加新步行时更新它或在此处计算总距离(例如,通过调用
步行距离

您必须调用该方法来更新
@walked\u距离
,例如:

def display_walks
    walked_distance # <------ This line
    puts "#{@name} has had #{@distance_in_kms.length} walks and walked #{@walked_distance} kms today:"
    @distance_in_kms.each do |each_walk|
        puts "#{each_walk[:distance]} km"
    end
end

离题,只是一个小的变化来评估:
@walked_distance = @distance_in_kms.values.sum

您必须调用该方法来更新行走距离,例如:

def display_walks
    walked_distance # <------ This line
    puts "#{@name} has had #{@distance_in_kms.length} walks and walked #{@walked_distance} kms today:"
    @distance_in_kms.each do |each_walk|
        puts "#{each_walk[:distance]} km"
    end
end

离题,只是一个小的变化来评估:
@walked_distance = @distance_in_kms.values.sum

一开始我也可以这么做:

类狗
属性存取器:名称
属性读取器:品种、年龄
def初始化(姓名、品种、年龄)
@name=name
@品种
@年龄=年龄
@距离(单位:公里)=[]
@步行距离=[]
结束
def步行(距离单位:公里)

@距离(单位:公里)一开始我也可以做到这一点:

类狗
属性存取器:名称
属性读取器:品种、年龄
def初始化(姓名、品种、年龄)
@name=name
@品种
@年龄=年龄
@距离(单位:公里)=[]
@步行距离=[]
结束
def步行(距离单位:公里)

@距离(单位:km)你的距离散列似乎没有键
:amount
是的,我把它改成了
:distance
,仍然不起作用将
{@walked\u distance}
字符串改成
{walked\u distance}
。方法中的实例变量从未在代码中调用过。啊,它起作用了!谢谢!您的距离散列似乎没有键
:amount
是的,我将其更改为
:distance
,仍然不起作用将
{@walked\u distance}
字符串更改为
{walked\u distance}
。方法中的实例变量从未在代码中调用过。啊,它起作用了!谢谢!那太棒了!非常感谢~~~真是太棒了!非常感谢~~~
@walked_distance = @distance_in_kms.values.sum