说我需要一些非常特殊的乘法运算符.它可以在以下宏中实现:
macro @< }
我可以像使用它一样
def val = 2 <它的工作.
但我真正想要的是现在正在开发的DSL Im的"英语"操作员:
macro @multiply(op1, op2) { <[ ( $op1 * $op2 ) ]> }如果我试着像它一样使用它
def val = 2 multiply 3编译器因'expected;'而失败 错误
问题是什么?如何实现这个中缀格式宏?
1> ADEpt..:直接从编译器源代码:
namespace Nemerle.English { [assembly: Nemerle.Internal.OperatorAttribute ("Nemerle.English", "and", false, 160, 161)] [assembly: Nemerle.Internal.OperatorAttribute ("Nemerle.English", "or", false, 150, 151)] [assembly: Nemerle.Internal.OperatorAttribute ("Nemerle.English", "not", true, 181, 180)] macro @and (e1, e2) { <[ $e1 && $e2 ]> } macro @or (e1, e2) { <[ $e1 || $e2 ]> } macro @not (e) { <[ ! $e ]> }你需要在周围撒上OperatorAttributes并且它会起作用.顺便说一句,OperatorAttribute定义如下:
public class OperatorAttribute : NemerleAttribute { public mutable env : string; public mutable name : string; public mutable IsUnary : bool; public mutable left : int; public mutable right : int; }