1

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

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

4

1 回答 1

2

我不确定您的用例是什么,但正如评论中提到的,当使用clr-call符号列表时,可以使用 OR'd 枚举。这里的例子。

在内部,编译器将通过调用来包装列表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 '())

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

于 2015-08-25T12:25:03.733 回答