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
来获取要作为参数传递的列表,如上所示。
如何 '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
来获取要作为参数传递的列表,如上所示。