0
A
回答
1
你不能。你可以得到訪問器,這裏是pt-x
和pt-y
,但是你不能單獨得到x
和y
。爲什麼是這樣?那麼,其中一個原因是,實際上可能有重複。考慮一個方案涉及的一些有害的結構分型:
#lang racket/base
(struct A [x] #:transparent)
(struct B A [x] #:transparent)
現在B
類型的結構有兩個x
領域,A-x
和B-x
。由於這個原因,當涉及子類型時,任何試圖單獨使用帶有結構的字段名的宏都會被破壞。
什麼你可以做的是使用的訪問者,而不是,您可以通過使用syntax-local-value
加extract-struct-info
,然後看結果列表的第四個元素實現。然而,老實說,我認爲這是太多的工作,所以我寫了一個語法課來爲你做所有的辛苦工作。安裝syntax-classes
包,並使用struct-id
語法類:
#lang racket/base
(require (for-syntax racket/base
syntax/parse/class/struct-id)
syntax/parse/define)
(define-simple-macro (struct-accessors id:struct-id)
(list id.accessor-id ...))
> (struct pt [x y] #:transparent)
> (struct-accessors pt)
'(#<procedure:pt-x> #<procedure:pt-y>)
相關問題
- 1. 使用宏,如何獲得結構字段的唯一名稱?
- 2. Liferay在schedule.jsp中獲取結構名稱
- 3. 如何使用dbghlp和pdb獲取結構體的字段名稱和偏移
- 4. 從Pig獲取字段架構的名稱
- 5. 獲取結構中的字段列表
- 6. solr問題獲取字段名稱
- 7. 獲取當前字段名稱
- 8. 如何獲取字段名稱
- 9. SQL加入以獲取字段名稱
- 10. 獲取域類字段名稱
- 11. 從Bindable fieldId獲取字段名稱
- 12. 如果結果爲空,如何獲取字段名稱? [PHP-笨]
- 13. 如何獲取java類的層次結構字段的字段?
- 14. 獲取架構名稱
- 15. 如何獲取字段名稱是什麼字段有價值?
- 16. 當字段名稱未知時,字段值獲取
- 17. 使用數組中的字段名稱創建結構
- 18. 動態分配具有層次結構的字段名稱
- 19. 如何更改mysql中名稱字段的結構
- 20. IDL:使用存儲在變量中的字段名稱訪問結構字段?
- 21. 字符串名稱B +樹的結構
- 22. 獲取JavaScript對象的字段由字符串名稱模式
- 23. 與jquery從名稱結構的輸入中獲取值
- 24. 如何從QMetaType獲取結構成員的名稱?
- 25. 獲取名稱(字符串)
- 26. 從數組數組中創建結構字段名稱
- 27. 如何在運行時按名稱訪問結構字段?
- 28. 從結果集中獲取CLSQL中的字段名稱和類型
- 29. 如何使用BeanShell從字段名稱獲取HTTP請求的名稱?
- 30. 使用名稱提取字段的ID
我想我可以叫'〜在訪問過程了'然後提取該字符串表示字段名,但這似乎極爲不雅。我希望使用結構體字段名稱來提取值以從sxml文檔實例化結構體,但是我開始認爲這不是最好的方式,或者甚至是一種可接受的方式。 – Winny
@Winny'accessor-id'屬性爲您提供了id,因此您可以使用'(map syntax -e(attribute accessor-id))'來獲得一堆符號;不要用'〜a'來表達這種冒險的方式。如果你確保'supertype-id'是'#t',那麼剝離掉一個通用的前綴* *可以用於沒有子類型的結構。 –