MST
星途 面试题库

面试题:Ruby中对象属性的访问控制

在Ruby中,如何定义一个对象的属性,使其对外界有不同程度的访问权限(如只读、读写等)?请举例说明,并阐述attr_reader、attr_writer、attr_accessor这几个方法的作用及区别。
42.4万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试

在Ruby中,可以通过attr_readerattr_writerattr_accessor这几个方法来定义对象属性的不同访问权限。

1. attr_reader

作用:用于创建一个只读属性,外界只能读取该属性的值,不能对其进行赋值。 示例:

class Person
  attr_reader :name
  def initialize(name)
    @name = name
  end
end

person = Person.new('Alice')
puts person.name # 输出: Alice
# person.name = 'Bob'  # 这行代码会报错,因为name是只读属性

2. attr_writer

作用:用于创建一个只写属性,外界只能对该属性进行赋值,不能直接读取其值。 示例:

class Person
  attr_writer :name
  def show_name
    puts @name
  end
end

person = Person.new
person.name = 'Alice'
person.show_name # 输出: Alice
# puts person.name  # 这行代码会报错,因为name是只写属性

3. attr_accessor

作用:用于创建一个读写属性,外界既可以读取该属性的值,也可以对其进行赋值。它相当于同时使用了attr_readerattr_writer。 示例:

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

person = Person.new('Alice')
puts person.name # 输出: Alice
person.name = 'Bob'
puts person.name # 输出: Bob

总结:

  • attr_reader创建只读属性,只提供读取方法。
  • attr_writer创建只写属性,只提供赋值方法。
  • attr_accessor创建读写属性,同时提供读取和赋值方法。通过合理使用这几个方法,可以有效控制对象属性对外界的访问权限。