Долгий ответ заключается в том, что вы можете делать все, что поддерживает терминал. Существует много видов терминалов (или «устройств вывода символов»), многие из которых поддерживают движения курсора. (Вы можете увидеть проект Termcap Library , чтобы создать представление о том, что делают разные типы терминалов.) Существует команда терминала для перемещения по линии, поэтому, в общем, да, вы должны это сделать. После того, как я запустил базу данных termcap , я пришел к следующему:
$ printf "\n"; printf '\e[A'; echo Foo
Foo
Другими словами, строка \e[A
имеет ненулевой шанс получить вас расстановка. На некоторых терминалах:)
Вы не можете вызвать attr_accessor в экземпляре, потому что attr_accessor не определен как метод экземпляра MyClass. Это доступно только для модулей и классов. Я подозреваю, что вы хотите вызвать attr_accessor в метаклассе экземпляра, например:
class MyClass
def initialize(varname)
class <<self
self
end.class_eval do
attr_accessor varname
end
end
end
o1 = MyClass.new(:foo)
o2 = MyClass.new(:bar)
o1.foo = "foo" # works
o2.bar = "bar" # works
o2.foo = "baz" # does not work