This:
attr_accessor :byte_content
По существу делает:
def byte_content
@byte_content
end
def byte_content=(value)
@byte_content = value
end
Затем
alias_method :read, :byte_content
alias_method :write, :byte_content=
создаст копии методов byte_content
и byte_content=
сread
и write
как новые имена.Если вы измените методы byte_content
или byte_content=
после алиасинга, read
и write
останутся без изменений.
Таким образом, намерение alias_method
в этом примере выглядит так:дать пользователю более "File
-подобный" интерфейс.Без псевдонимов методов вы бы использовали:
file = MyFile.new
file.byte_content = "abcd"
puts file.byte_content
С псевдонимами пользователь может использовать:
file = MyFile.new
file.write("abcd")
file.read
, что очень похоже на методы стандартной библиотеки File
class,
file = File.open('/tmp/foo.txt', 'w')
file.write('hello')
file.rewind
puts file.read
И это позволяет использовать экземпляры MyFile
вместо реальных File
экземпляров в некоторых очень простых случаях использования, также известных как Duck-typing .
alias
против alias_method
Различия alias
и alias_method
описаны в ответах на на этот вопрос , наиболее важно:
- вы можете переопределить
alias_method
, но не alias
alias_method
используется с символами в качестве имен методов, что делает его полезным для динамически создаваемых методов