Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_Class_Object - Fatal编程技术网

用ruby描述类关系

用ruby描述类关系,ruby,oop,class,object,Ruby,Oop,Class,Object,我从未做过任何直接的ruby编码——只使用Rails框架 除了继承关系之外,我不知道如何描述类之间的关系 例如,一个学校对象可能有许多学生对象。 我希望能够拨打“myschool.student[2].first_name”和“mystudent.school.address”之类的电话 可能是我把OOP和关系数据库的元素搞混了,如果我不理解的话,我很抱歉。一般来说,在大多数OO语言中,类成员在默认情况下不会暴露于外部世界。即使是(在某些语言中),直接访问类成员也被认为是不好的做法 将成员添加到

我从未做过任何直接的ruby编码——只使用Rails框架

除了继承关系之外,我不知道如何描述类之间的关系

例如,一个学校对象可能有许多学生对象。 我希望能够拨打“myschool.student[2].first_name”和“mystudent.school.address”之类的电话


可能是我把OOP和关系数据库的元素搞混了,如果我不理解的话,我很抱歉。

一般来说,在大多数OO语言中,类成员在默认情况下不会暴露于外部世界。即使是(在某些语言中),直接访问类成员也被认为是不好的做法

将成员添加到类(例如,将学生类添加到学校)时,需要添加访问器函数,以提供外部世界对这些成员的访问

如果您想了解更多信息,这里有一些有用的资源(通过谷歌搜索找到:ruby accessors):


我不是100%确定这里的问题是什么

对于第一个示例,
myschool.students[2]。first_name
,您的
School
类需要一个
students
字段的访问器,该字段必须是一个数组(或其他支持下标的内容),例如

上面允许
myschool.students[2]
返回一些内容。假设
Student
包含
Student
类的实例,该类可能如下所示:

class Student
  attr_reader :first_name, :last_name

  def initialize(first, last)
    @first_name = first
    @last_name = last
  end
end
现在你的例子,
myschool.students[2]。first_name
,应该可以了

对于第二个示例,
mystudent.school.address
,您需要在
Student
类中有一个
school
字段,在
school
类中有一个
address
字段

棘手的一点是
学校
学生
实例相互指向,因此您需要在某个点设置这些引用。这将是一个简单的方法:

class School
  def add_student(student)
    @students << student
    student.school = self
  end
end

class Student
  attr_accessor :school
end
班级学校
def add_学生(学生)

@同学们,谢谢。我正在使用attr_访问器访问学校和学生的属性,但我不知道如何告诉程序一个学校有很多学生。回答很好!我没意识到事情就这么简单。非常感谢。
class School
  def add_student(student)
    @students << student
    student.school = self
  end
end

class Student
  attr_accessor :school
end