IronScheme:你如何 'or' 枚举条目

IronScheme: How do you 'or' enumeration entries

如何 'or' 在 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)

这会导致错误,我在文档中没有找到替代方法。

我不确定你的用例是什么,但正如评论中提到的,当使用 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 '())

如果这些只是简单的标志,列表就足够了,否则您可以在允许许多集合操作的 Scheme 中将 enum 重新定义为 enum-set。最后,您只需使用 enum-set->list 来获取要作为参数传递的列表,如上所示。