水晶行爲,我創建這個類:與變量assignement
1. class Component
2.
3. getter :content, :htm_options, :options
3.
4. @html_options : Hash(Symbol | String, Symbol | String)
5. @options : Hash(Symbol | String, Symbol | String)
6. @content : String
7.
8. def initialize(c = nil, o = nil, h = nil, block = nil)
9. if false #!block.nil?
10. @html_options = o unless o.nil?
11. @options = c unless c.nil?
12. context = eval("self", block.binding)
13. @content = context.capture(&block)
14. else
15. if c.is_a?(Hash)
16. @html_options = o unless o.nil?
17. @options = c unless c.nil?
18. else
19. @html_options = h unless h.nil?
20. @options = o unless o.nil?
21. @content = c unless c.nil?
22. end
23. end
24. end
25. end
Component.new("My text")
我有一個錯誤:
in src/ui_bibz/ui/core/component.cr:11: instance variable '@options' of Component must be Hash(String | Symbol, String | Symbol), not String
@options = c unless c.nil?
我不理解這種行爲,因爲我沒有在if條件通過。我想根據幾種情況分配@htm_options, @options, @content
。 是否可以聲明一個已經聲明過的變量?
這很煩人:(謝謝 – Thooams
因爲後,我有一個哈希合併@options的方法,但編譯器提醒我有一個錯誤:'找不到重載對於這些類型:Hash(Symbol,Symbol)#merge(other:String)'。這是正常的,因爲我定義了@options就像一個哈希和字符串的聯合。沒有解決方案!! :( – Thooams
總有一個解決方案或破解會工作,但Crystal是靜態類型的,使用完全不同類型的工會通常最終會非常煩人。也許你可以重新思考你的API,所以選項總是一個例如'哈希(字符串,字符串)'? –