В зависимости от того, что именно вы имеете в виду, есть несколько способов сделать это.
В простейшем случае вы добавили переменные или методы в уже существующий класс, как в этом примере:
class String
def rot13
return self.tr('a-z', 'n-za-m')
end
end
Здесь мы добавили метод rot13 к классу String. Как только этот код будет запущен, каждая строка в вашей программе сможет # rot13. Таким образом, если у вас есть код, которому нужны строки с поддержкой rot13, вы просто должны убедиться, что приведенный выше код выполняется перед рассматриваемым кодом, например, помещая код rot13 в файл и требуя его (). Очень просто!
Но, возможно, вы добавили переменную класса в класс и хотите сохранить не только ее существование, но и значение, как в:
class String
@@number_of_tr_calls_made = 0
# Fix up #tr so that it increments @@number_of_tr_calls_made
end
Теперь, если вы хотите сохранить значение @@ number_of_tr_calls_made, вы можете сделать это так же, как и с любым другим сериализуемым значением Ruby: через библиотеку Marshal. Также просто!
Но что-то в том, как вы сформулировали свой вопрос, заставляет меня подозревать, что вы делаете что-то вроде этого:
greeting = "Hello"
class <<greeting
def rot13
return self.tr('a-z', 'n-za-m')
end
end
encrypted_greeting = greeting.rot13
Это очень отличается от того, что мы сделали в первом примере. Этот фрагмент кода дал каждой строке в вашей программе возможность самому rot13. Этот код предоставляет эту силу только объекту, указанному под названием «приветствие». Внутренне Ruby делает это, создавая анонимный подкласс Singleton String, добавляя к нему метод rot13 и изменяя класс приветствия для этого анонимного подкласса.
Проблема здесь в том, что синглтоны не могут быть маршалами (чтобы понять почему, попытайтесь выяснить, как сохранить инвариант синглтона, когда любой вызов Marshal.load может генерировать копии существующих объектов синглтона). Теперь в иерархии наследования приветствия есть Singleton, поэтому, если вы хотите сохранить и загрузить его, вы попадаете в нужное место. Вместо этого создайте подкласс:
class HighlySecurableString < String
def rot13
return self.tr('a-z', 'n-za-m')
end
end
greeting = HighlySecurableString.new("hello")