Вы, вероятно, никогда не захотите это делать, а просто ответите на вопрос.
Возможно ли это даже с некоторыми изменениями?
Да, мы можем создать наш собственный класс, чтобы сделать это довольно легко.
class MyAnonObject
attr_accessor attributes
def attributes
@attributes ||= {}
end
def method_missing method, *args, &block
if method =~ /^(\w+)=$/
@attributes[$1] = args[0]
else
@attributes[$1]
end
end
end
И тогда мы можем изменить ваш пример для использования этого нового класса.
@books = Hash.new { MyAnonObject.new }
@books[key].title = "A Title"
@books[key].condition = "Poor"
@books[key].rating = "Excellent"
При этом я бы не рекомендовал это решение. Это может быть очень запутанным, чтобы читать. Однако это возможно =) И действительно, это просто многомерный хеш со странной семантикой.