2016-02-09 47 views
-1

如何在函数定义中声明变量类型?在函数声明中定义变量类型Ruby

在下面的代码:

def f(a, b) 
#... 
end 

我可以用什么类型,它的工作原理算了。我如何声明它是一个fixnum?谢谢

+0

Ruby有弱输入。变量在实例化时的确具有类类型,但您可以自由地将它们重新分配给另一个变量类型。只有存储这些信息的方法在你的函数的文档中。 –

回答

-1

查看评论和其他答案,澄清什么是真正的“类型”。

如何测试一个“变量的类型”(Ruby中的每一个变量引用一个对象,我们不谈论类型,但类)

如何测试一类:

variable = MyClass.new 
variable.class # => "MyClass" 
variable.is_a?(MyClass) # => true 

但通常在Ruby中,我们更感兴趣的是哪些对象可以做什么,我们可以与他们无关:

if variable.respond_to?(increment) 
    variable.increment 
else 
    raise "Error : must provide as 'variable' an object that can increment itself" 
end 

现在回答你的问题,我会在福中“声明”的行为nction定义/使用RDoc的语法意见

# Description of f 
# Params: 
# +a+:: command line string to be executed by the system 
# +b+:: +Proc+ object that .... 
def f(a, b) 
    # code 
end 
+0

这将*不*告诉你一个“变量的类型”。它将成为* object *的* class *。 –

+0

@JörgWMittag然后请告诉我对象的类和“变量类型”之间的区别。 在Ruby中,我们操作的所有变量实际上都是“类”,因此谈论“类型”是没有意义的。这或我不理解OP的问题。 –

+0

类不是类型。 *协议*是类型。 *任何说出正确协议的对象都属于同一类型。在Ruby中没有相应的类或混入的知名协议的一些例子是我将称为** Appendable **协议(由一个名为'<<'的方法组成,该方法将它的参数附加到它的接收器)或者** Iterable **协议(由一个名为'each'的方法组成,它依次产生每个接收者的元素)。 [注:我编了这些名字。实际上,这些协议在Ruby文化中如此根深蒂固,甚至连名字都没有。] –

1

有你的问题的困惑两点:

  1. 变量没有类型Ruby的。只有物体可以。
  2. Fixnum不是一个类型,它是一个类。类不是类型。 协议是类型。 任何说出正确协议的对象是相同类型的。在Ruby中没有相应类或混入的熟知协议的一些示例是我将称为可附加协议(由名为<<的方法组成,其方法名称将其参数附加到其接收器)或可协议的协议(由名为each的方法组成,其中yield是其每个接收器的元素)。 [注:我编了这些名字。在现实中,这些协议是如此之深在Ruby中文化根深蒂固,他们甚至没有名字。]

一般情况下,你会描述的文档中的协议(S)的方法,从它的参数预计方法,但有时这个描述被省略,如果例如从方法名称或参数名称中可以明显看出。