回答
查看评论和其他答案,澄清什么是真正的“类型”。
如何测试一个“变量的类型”(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
这将*不*告诉你一个“变量的类型”。它将成为* object *的* class *。 –
@JörgWMittag然后请告诉我对象的类和“变量类型”之间的区别。 在Ruby中,我们操作的所有变量实际上都是“类”,因此谈论“类型”是没有意义的。这或我不理解OP的问题。 –
类不是类型。 *协议*是类型。 *任何说出正确协议的对象都属于同一类型。在Ruby中没有相应的类或混入的知名协议的一些例子是我将称为** Appendable **协议(由一个名为'<<'的方法组成,该方法将它的参数附加到它的接收器)或者** Iterable **协议(由一个名为'each'的方法组成,它依次产生每个接收者的元素)。 [注:我编了这些名字。实际上,这些协议在Ruby文化中如此根深蒂固,甚至连名字都没有。] –
有你的问题的困惑两点:
- 变量没有类型Ruby的。只有物体可以。
Fixnum
不是一个类型,它是一个类。类不是类型。 协议是类型。 任何说出正确协议的对象是相同类型的。在Ruby中没有相应类或混入的熟知协议的一些示例是我将称为可附加协议(由名为<<
的方法组成,其方法名称将其参数附加到其接收器)或可协议的协议(由名为each
的方法组成,其中yield
是其每个接收器的元素)。 [注:我编了这些名字。在现实中,这些协议是如此之深在Ruby中文化根深蒂固,他们甚至没有名字。]
一般情况下,你会描述的文档中的协议(S)的方法,从它的参数预计方法,但有时这个描述被省略,如果例如从方法名称或参数名称中可以明显看出。
- 1. 在Ruby中声明变量?
- 2. ruby中的整型变量声明
- 3. 定义的函数,在一个声明中声明一个变量
- 4. 什么是Ruby的类似Python的变量,未在类定义中声明?
- 5. 在Swift中声明函数类型的变量有什么意义?
- 6. clang - 符号(变量,函数,类型等)定义或声明或引用
- 7. 在C++中声明变量而不指定其数据类型
- 8. 在Scilab中定义/声明变量`
- 9. 变量声明和定义
- 10. 从函数声明中使用类型变量
- 11. 变量声明和数据类型
- 12. 未定义的变量变量声明
- 13. 在函数中声明变量
- 14. 在函数中声明静态变量
- 15. 在Javascript函数中声明变量
- 16. 在SQL函数中声明变量
- 17. 在表值函数中声明变量
- 18. 在Perl函数中声明变量
- 19. 函数定义,调用和声明中的变量名
- 20. 函数定义中的函数声明
- 21. 新类型声明函数?
- 22. 用模板定义类型声明变量
- 23. 声明泛型变量类型
- 24. Ruby方法变量声明
- 25. 变量声明++型
- 26. 函数声明和定义
- 27. 什么是变量声明的dart函数类型语法?
- 28. 如何在Go中声明循环变量的变量类型?
- 29. 定义在类(C++)中声明的变量的范围?
- 30. Ruby定义类变量
Ruby有弱输入。变量在实例化时的确具有类类型,但您可以自由地将它们重新分配给另一个变量类型。只有存储这些信息的方法在你的函数的文档中。 –