2015-08-22 52 views
1

如何在IronScheme你「或」枚舉項,例如:IronScheme:你如何「或」枚舉條目

(import                                    
    (rnrs)                                    
    (ironscheme clr))                                  

(clr-using System.Reflection)                               

(define public-class-attributes                              
    (bitwise-ior                                   
    (clr-static-field-get                                
     TypeAttributes Public)                                
    (clr-static-field-get                                
     TypeAttributes Class)))                               

(display public-class-attributes) 

這將導致一個錯誤,我還沒有發現的文檔中的替代品。

+0

嗨。這在IronScheme中不是直接可能的,因爲枚舉不是整數類型。但是,IIRC有一種方法可以在使用'clr-call'時使用符號列表作爲參數來模擬這種情況。我會看看我是否有現有的例子。 – leppie

回答

2

我不確定你的用例是什麼,但正如在註釋中提到的那樣,當使用clr-call時,符號列表可以用於OR'd枚舉。示例here

在內部,編譯器會通過調用Helpers.SymbolToEnum<T>()來包裝列表。

注意:該情況被忽略。

爲了說明一個小例子:

C#代碼:

[Flags] 
enum Foo 
{ 
    Bar = 1, 
    Baz = 2 
} 

class AType 
{ 
    static void Kazaam(Foo foo) { ... } 
} 

計劃代碼:

; same as Bar | Baz 
(clr-static-call AType Kazaam '(Bar Baz)) 

; single value 
(clr-static-call AType Kazaam 'Baz) 
; same thing 
(clr-static-call AType Kazaam '(Baz)) 

; no value (iow zero) 
(clr-static-call AType Kazaam '()) 

如果這些都只是簡單的標誌,列表應該足夠了,否則你可以在Sc中重新定義enum作爲enum-set血紅素,允許許多設置操作。最後,您只需使用enum-set->list即可將列表作爲參數傳遞,如上所示。