Surroundwith - vilinski/nemerle GitHub Wiki

The surroundwith macro is macro which can help you to emulate "using"-like behavior.

You can define surround by DefineSurround macro and use name (defined by DefineSurround) in surroundwith.

The DefineSurround macro has the following parameters:

  • name - name of defined surround (string)
  • useTryFinally - when true, try/finally expression is generated for each surroundwith.
  • beforeExpr - expression to add before surrounded expression
  • afterExpr - expression to add after surrounded expression
The surroundwith should have one or many expressions which will be surrounded by beforeExpr and afterExpr (defined by DefineSurround).

Following example demonstrates the usage of this macro:

using System.Console;
using Nemerle.Surround;

[assembly: DefineSurround("surround1", false, WriteLine("Surround1Before"), WriteLine("Surround1After"))]
[assembly: DefineSurround("surround2", false, WriteLine("Surround2Before"), WriteLine("Surround2After"))]
[assembly: DefineSurround("surround3", false, WriteLine("Surround3Before"), WriteLine("Surround3After"))]

module Test
{
  Main() : void
  {
    surroundwith (surround1, surround2, surround3)
      WriteLine("Test1");

    WriteLine();

    surroundwith (surround1)
      WriteLine("Test2");

    WriteLine();

      surroundwith (surround1)
    surroundwith (surround2)
      WriteLine("Test3");

  }
}
This example output:
Surround1Before
Surround2Before
Surround3Before
Test1
Surround3After
Surround2After
Surround1After

Surround1Before
Test2
Surround1After

Surround1Before
Surround2Before
Test3
Surround2After
Surround1After
⚠️ **GitHub.com Fallback** ⚠️