Crystal语言是否拥有Ruby中类似的attr_accessor等属性访问器方法?
Crystal与Ruby属性访问器的等价特性
Crystal确实提供了和Ruby中attr_accessor、attr_reader、attr_writer完全等价的特性,用法也高度相似,以下是具体说明:
attr_reader等价实现
Crystal中直接使用attr_reader : 属性名来生成只读访问器,示例代码:class Person attr_reader :name def initialize(@name : String) end end person = Person.new("Alice") puts person.name # 允许读取属性值 # person.name = "Bob" # 编译报错,无法修改attr_writer等价实现
对应使用attr_writer : 属性名生成只写访问器,示例代码:class Person attr_writer :age def initialize @age = 0 end end person = Person.new person.age = 30 # 允许赋值 # puts person.age # 编译报错,无法直接读取attr_accessor等价实现
使用attr_accessor : 属性名生成可读可写的访问器,示例代码:class Person attr_accessor :email def initialize(@email : String) end end person = Person.new("alice@example.com") puts person.email # 读取属性值 person.email = "alice_new@example.com" # 修改属性值
需要注意的是,作为静态类型语言,Crystal的属性通常需要指定类型(如示例中的: String),这是和Ruby动态类型特性的一点差异,但核心的访问器功能与Ruby完全一致。
内容的提问来源于stack exchange,提问作者Jacob M. Barnard
相关产品推荐
相关产品推荐

