如何确保ruby中的方法具有特定类型
您可能知道,ruby和大多数脚本语言一样,是动态类型的。如何确保传递给我的方法的参数是特定类的实例?使用如何确保ruby中的方法具有特定类型,ruby,Ruby,您可能知道,ruby和大多数脚本语言一样,是动态类型的。如何确保传递给我的方法的参数是特定类的实例?使用is\u a?: def your_method(param) if param.is_a? String # it's a string else # not a string end end 或者,如果要检查的类很多,则使用case语句: def your_method(param) case param when
is\u a?
:
def your_method(param)
if param.is_a? String
# it's a string
else
# not a string
end
end
或者,如果要检查的类很多,则使用case
语句:
def your_method(param)
case param
when String
# it's a string
when Array
# it's an array
when Rational
# it's a rational
# ...
else
# it's not any of these classes
end
end
使用
是否是一个?
:
def your_method(param)
if param.is_a? String
# it's a string
else
# not a string
end
end
或者,如果要检查的类很多,则使用case
语句:
def your_method(param)
case param
when String
# it's a string
when Array
# it's an array
when Rational
# it's a rational
# ...
else
# it's not any of these classes
end
end
由调用方提供正确类型的参数。在Ruby中,如果使用不支持类型的参数调用方法,则通常会引发
ArgumentError
。例如:
def do_something_with_a_number(number)
raise ArgumentError, "you have to provide a number" unless number.is_a?(Fixnum)
...
end
由调用方提供正确类型的参数。在Ruby中,如果使用不支持类型的参数调用方法,则通常会引发
ArgumentError
。例如:
def do_something_with_a_number(number)
raise ArgumentError, "you have to provide a number" unless number.is_a?(Fixnum)
...
end
检查它的类型
那么,为什么呢?一般来说,你应该关注它的低调,而不是它的类型。当某种东西与它的类型而不是它的消息绑定时,我通常会怀疑。检查它的类型
那么,为什么呢?一般来说,你应该关注它的低调,而不是它的类型。当某件事与它的类型而不是它的消息相关时,我通常会产生怀疑。+1。具体来说,
parameter.response\u to?(:method\u i\u want)
比parameter.is\u a?(ClassIWant)
更可取。错误检查。假设您的方法调用一个字符串,而某个愚蠢的程序员传递了一个数字。强类型语言不可能,Runy、PHP或Python等语言也可能。@DariuszG.Jagielski我不明白你想说什么。我说要检查它的类型,但同样,最好检查它的接口。具体来说,parameter.response\u to?(:method\u i\u want)
比parameter.is\u a?(ClassIWant)
更可取。错误检查。假设您的方法调用一个字符串,而某个愚蠢的程序员传递了一个数字。强类型语言不可能,Runy、PHP或Python等语言也可能。@DariuszG.Jagielski我不明白你想说什么。我说要检查它的类型,但还是要检查它的接口。谢谢。谢谢