Can I tell a Ruby method to expect a specific parameter type?

五迷三道 提交于 2019-12-13 12:26:51

问题


def doSomething(value)
    if (value.is_a?(Integer))
        print value * 2
    else
        print "Error: Expected integer value"
        exit
    end
end

Can I tell a Ruby method that a certain parameter should be an Integer, otherwise crash? Like Java.


回答1:


No, you can't. You can only do what you're already doing: check the type yourself.




回答2:


I'm late to the party, but I wanted to add something else:

A really important concept in Ruby is Duck Typing. The idea behind this principle is that you don't really care about the types of your variables, as far as they can do what you want to do with them. What you want in your method is to accept a variable that responds to (*). You don't care about the class name as far as the instance can be multiplied.

Because of that, in Ruby you will see more often the method #responds_to? than #is_a?

In general, you will be doing type assertion only when accepting values from external sources, such as user input.




回答3:


You can raise an Exception anytime arbitrarily if you deem it necessary.

def doSomething(value)
    if (value.is_a?(Integer))
        print value * 2
    else
        raise "Expected integer value"
    end
end

Whether or not you really want to do this is a separate issue. :)




回答4:


I would suggest a raise unless type match at the beginning of the method

def do_something(value)
  raise TypeError, 'do_something expects an integer' unless value.kind_of?(Integer)
  ...
end

This is raise an error and exit unless value is an Integer



来源:https://stackoverflow.com/questions/14575581/can-i-tell-a-ruby-method-to-expect-a-specific-parameter-type

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!