在函数声明

时间:2016-02-09 19:59:49

标签: ruby

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

在下一个代码中:

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

我可以忘记它适用的类型。我如何声明它是一个fixnum?感谢

2 个答案:

答案 0 :(得分:1)

你的问题有两点混淆:

  1. 变量没有Ruby中的类型。只有对象可以。
  2. Fixnum不是类型,而是类。类不是类型。 协议是类型。 任何说出正确协议的对象属于同一类型。 Ruby中众所周知的没有相应类或mixin的协议的例子就是我所说的 Appendable 协议(由名为<<的方法组成,该方法将其参数附加到其中接收器)或 Iterable 协议(由名为each的方法组成,其yield依次为{{1}}每个接收器的元素。 [注意:我编造了这些名字。实际上,这些协议在Ruby文化中根深蒂固,甚至没有名字。]
  3. 一般情况下,您将在方法文档中描述您的方法所期望的协议,但有时会遗漏此描述,例如:从方法的名称或参数的名称可以看出这一点。

答案 1 :(得分:-1)

请参阅评论和其他答案,以澄清什么是真正的&#34;类型&#34;。

如何测试&#34;变量的类型&#34; (在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

现在回答你的问题,我会&#34;宣布&#34;使用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