Могу я сказать или намекнуть RubyMine, какой тип является локальной или переменной экземпляра?
Я пытаюсь использовать быстрые документы RubyMine и завершение кода. Мне было приятно узнать, насколько хорошо он интегрировал комментарии в стиле YARD:
# @param [Numeric] width
# @param [Array<String>] values
# @return [Widget]
def foo(width, values)
... эти комментарии отлично подходят для параметров, возвращаемых типов, даже типизированных коллекций. Но я не могу найти похожие теги для экземпляра или локальные переменные, и я уверен, что в Ruby нет никакого каста-типа (я упоминал, что я новичок в этом?)
Есть ли способ определить RubyMine для типов переменных локального и/или экземпляра?
Ответы
Ответ 1
Похоже, что это предстоящий, основанный на недавнем комментарии, опубликованном к трекеру проблем, на который ссылается Мэтт Коннолли: http://youtrack.jetbrains.com/issue/RUBY-9142#comment=27-787975
"локальные переменные могут быть аннотированы с именем или без имени:"
# @type [String]
my_var = magic_method
# @type my_var [String]
my_var = magic_method
# @type [String] my_var
my_var = magic_method
# @type [String] my_var And some documentation is allowed
my_var = magic_method
"Также поддерживаются множественные назначения:
# @type my_var [String] The first part
# @type other_var [Range] The second part
my_var, other_var = magic_method
"Но в случае многозадачности форма без имени var не будет работать (это можно утверждать, но я склонен к тому, что это может привести к некоторым ошибкам)
Также можно аннотировать параметры блока: "
method_with_block do
# @type [String] param1
# @type [Range] param2
| param1, param2 |
# some code...
end
"Следует отметить, что аннотации типа должны быть размещены после do или {и перед списком параметров блока, чтобы избежать возможной двусмысленности. В случае с одним слоем это выглядит громоздким, но я не уверен, что они в любом случае, любые предложения очень приветствуются".
Ответ 2
Это не так. Я бы порекомендовал посмотреть в трекер проблемы для существующих запросов функций и добавить, чтобы ваш голос был услышан. Например:
http://youtrack.jetbrains.com/issue/RUBY-9142
Обновление
Эта функция теперь поставляется с RubyMine 7.0 (Tsubaki) EAP (138.1968) и выше (но обратите внимание, что Rubymine 7.0 в настоящее время находится в EAP (т.е. в бета-версии), и всегда есть шанс, что это может не оказаться в финальном дистрибутиве).
Ответ 3
Это не 100% ответ на этот конкретный вопрос, но может указать на другой полезный трюк.
В тестах я делаю это так, чтобы обмануть RubyMine (5.0.2)
user = users(:normal) || User.new
поскольку с помощью приборов я уверен, что пользователи (: first) вернут объект, а из-за Use.new - IDE думает, что это должен быть экземпляр пользователя.