ruby - 将对象传递给类初始化器
问题描述
我今天开始学习 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”存在。
解决方案
我修复了您代码中的一些错误。
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()
- 你在 new 和 params 之间有一个额外的空间
Person.new (name, addr)
- 在人员类中,变量被称为
address
不addr
- 我想而不是
puts
ing 中的对象,Person#show
我猜你想调用你的show
方法来放置它们的属性。
我认为您对syntax error
. 它试图将您的代码简化为错误部分,而恰好切断了该 p。真正的问题是new
告诉程序在没有传入参数的情况下调用新方法之后的空间。
推荐阅读
- java - java.lang.Exception:OperationDesc 未同步到 SoapSkeleton 的方法
- node.js - 尝试安装最新版本的 npm 但权限有问题
- python-3.x - 带有 For 循环的 Python 多线程
- excel - VBA:带有“ SolverAdd CellRef:”单元格的循环求解器命令随每个循环而变化
- c++ - errorfds vs select 返回值,然后 select() 立即返回?
- r - 有没有更快的方法来避免 R 中 K 交叉验证中的 for 循环?
- javascript - 如何使用 Vue 将数据从视图发送到数据库?
- java - Spring Data MongoDB 有时会截断大字符串
- python - 返回 x 天前的日期的 Python 函数
- ruby-on-rails - Rails ActiveAdmin:ActiveRecord::RecordNotFound in Admin::UsersController#show