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 された列挙型に使用できます。例はこちら

内部的に、コンパイラは への呼び出しでリストをラップし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を再定義できます。enum-set最後に、enum-set->list上記のように引数として渡すリストを取得するために使用します。

于 2015-08-25T12:25:03.733 に答える