回答
查看評論和其他答案,澄清什麼是真正的「類型」。
如何測試一個「變量的類型」(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有弱輸入。變量在實例化時的確具有類類型,但您可以自由地將它們重新分配給另一個變量類型。只有存儲這些信息的方法在你的函數的文檔中。 –