首页 > 解决方案 > 将对象传递给类初始化器

问题描述

我今天开始学习 Ruby,并立即陷入了如何将对象作为其初始化程序传递给另一个类的问题。如何将名称和地址传递给 Person 的初始化程序?

这是我的代码:

class Name
    attr_accessor :first, :last
    def initialize (first, last)
        @first = first
        @last = last
        puts "created name"
    end

    def show ()
        puts first, last
    end
end

class Address
    attr_accessor :street, :city, :state
    def initialize (street, city, state)
        @street = street
        @city = city
        @state = state
        puts "Created addresss"
    end

    def show()
        puts street, city, state
    end
end

class Person 
    attr_accessor :name, :address
    def initialize (name, address)
        @name = name
        @address = address
    end

    def show()
        puts name
        puts addr
        puts "created person"
    end
end

name = Name.new("Sam", "Spade")
name.show()

addr =  Address.new("111 State St", "Albany",  "NY") 
addr.show()

person = Person.new (name, addr)
person.show()

我得到的诊断是 person.rb:48: syntax error, unexpected ')', expecting '=' ...erson = Person.new (name, addr)

看起来 person 对象的创建缺少“p”,但代码显示“p”存在。

标签: ruby

解决方案


我修复了您代码中的一些错误。

class Name
    attr_accessor :first, :last
    def initialize (first, last)
        @first = first
        @last = last
        puts "created name"
    end

    def show()
        puts first, last
    end
end

class Address
    attr_accessor :street, :city, :state
    def initialize (street, city, state)
        @street = street
        @city = city
        @state = state
        puts "Created addresss"
    end

    def show()
        puts street, city, state
    end
end

class Person
    attr_accessor :name, :address
    def initialize (name, address)
        @name = name
        @address = address
    end

    def show()
        name.show
        address.show
        puts "created person"
    end
end

name = Name.new("Sam", "Spade")
name.show()

addr =  Address.new("111 State St", "Albany",  "NY")
addr.show()

person = Person.new(name, addr)
person.show()
  1. 你在 new 和 params 之间有一个额外的空间Person.new (name, addr)
  2. 在人员类中,变量被称为addressaddr
  3. 我想而不是putsing 中的对象,Person#show我猜你想调用你的show方法来放置它们的属性。

我认为您对syntax error. 它试图将您的代码简化为错误部分,而恰好切断了该 p。真正的问题是new告诉程序在没有传入参数的情况下调用新方法之后的空间。


推荐阅读