Project

General

Profile

Feature #19708

Updated by AMomchilov (Alexander Momchilov) over 1 year ago

Creating reader methods with `attr_reader` is preferable over defining them by hand, not only because it's more convenient, but also because it hits a fast path in MRI (see `VM_METHOD_TYPE_IVAR`). 

 Since local and instance variables can't end with `?`, you can't use `attr_reader` to define predicate-style methods for boolean values, like: 

 ```ruby 
 class Person 
   attr_reader :name, attr_reader(:name, :age, :active? :active?) # invalid attribute name `active?' (NameError) 
  
   def initialize 
     @name = "Bob" 
     @age = 30 
     @active = true 
   end 
 end 
 ``` 

 It would be nice if `attr_reader` (and friends) could behave like: 

 ```ruby 
 def active? = @active 
 ``` 

 (`attr_writer` and `attr_accessor` couldn't do the same, since `def active?=(new_value)` isn't valid, so they'd probably stick with `def active=(new_value)`)

Back