我可以告诉或暗示RubyMine本地或实例变量的类型是什么?

Wis*_*uck 14 ruby rubymine

我正在尝试利用RubyMine快速文档和代码完成.我很高兴发现它融合了YARD风格的评论:

# @param [Numeric] width
# @param [Array<String>] values
# @return [Widget]      
def foo(width, values)
Run Code Online (Sandbox Code Playgroud)

...这些注释非常适用于参数,返回类型,甚至是类型集合.但是我找不到任何类似的标签或者局部变量,我很确定Ruby中没有可用的类型转换(我提到我是新手吗?)

有没有办法将RubyMine引入本地和/或实例变量的类型?

Wis*_*uck 14

根据Matt Connolly引用的问题跟踪器最近的评论,它似乎即将发布: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
Run Code Online (Sandbox Code Playgroud)

"还支持多项任务:"

# @type my_var [String] The first part
# @type other_var [Range] The second part
my_var, other_var = magic_method
Run Code Online (Sandbox Code Playgroud)

"但是在多项任务的情况下,没有var名称的表格不起作用(这是有争议的,但我倾向于它可能会导致一些错误)

块参数也可以注释:"

method_with_block do
  # @type [String] param1
  # @type [Range] param2
  | param1, param2 |
  # some code...
end
Run Code Online (Sandbox Code Playgroud)

"需要注意的是,类型注释将放在do或{和块参数列表之前,以帮助避免可能的歧义.在单行的情况下,它看起来很麻烦,但我不确定它们是否会很重无论如何,任何建议都是非常受欢迎的."


Grz*_*orz 5

对于这个特定的问题,这不是100%的答案,但可以指出其他有用的技巧.

在测试中,我这样做是为了欺骗RubyMine(5.0.2)

user = users(:normal) || User.new
Run Code Online (Sandbox Code Playgroud)

因为使用fixtures我确信用户(:first)将返回该对象,并且由于Use.new - IDE认为它应该是User实例.