Also works but is there a reason you had to use the lambda? Why not just
pass the string array directly?
On Fri, Nov 7, 2008 at 4:08 PM, Paul Cowan <[EMAIL PROTECTED]> wrote:
> I ended up fixing it this way:
>
> protected void SetBuildTargets(Func<string[]> tasksAction)
> {
> foreach(var task in tasksAction())
> BuildTasks.Add(task);
> }
>
> [Meta]
> public static Expression tasks(params ReferenceExpression[] expressions)
> {
> var blockExpression = new BlockExpression();
>
> var arrayExpression = new ArrayLiteralExpression();
>
> for (var i = 0; i < expressions.Length; i++)
> arrayExpression.Items.Add(new
> StringLiteralExpression(expressions[i].Name));
>
> blockExpression.Body.Add(new ReturnStatement(arrayExpression));
>
> return new MethodInvocationExpression(
> new ReferenceExpression("SetBuildTargets"),
> blockExpression
> );
> }
>
> 2008/11/7 Ayende Rahien <[EMAIL PROTECTED]>
>
> As for documentation.The best resource for that are chapter 6 & chapter
>> 12.
>>
>>
>> On Fri, Nov 7, 2008 at 1:55 PM, dagda1 <[EMAIL PROTECTED]> wrote:
>>
>>>
>>> >> You need to create a meta method that accepts a params of
>>> ReferenceExpression.this will allow you to skip the strings.
>>>
>>> I can get this working for one task expression
>>>
>>> Like this for the DSL:
>>>
>>> install "horn":
>>> description "This is a description of horn"
>>> svn "https://svnserver/trunk"
>>> #buildfile default.build
>>> tasks one
>>>
>>> And this for the meta method:
>>>
>>> [Meta]
>>> public static Expression tasks(ReferenceExpression expression)
>>> {
>>> var condition = new BlockExpression();
>>>
>>> var taskExpression = new StringLiteralExpression(expression.Name);
>>>
>>> condition.Body.Add(new ReturnStatement(taskExpression));
>>>
>>> return new MethodInvocationExpression(
>>> new ReferenceExpression("SetBuildTargets"),
>>> condition
>>> );
>>> }
>>>
>>>
>>> I cannot work out how to handle an array of ReferenceExpressions as I
>>> can only return 1 expression.
>>>
>>> Do I need to use a ListExpression or something?
>>>
>>> By the way the lack of documentation for this kind of thing is
>>> frightenning. Without Rhino.DSL I would have been lost.
>>>
>>> Cheers
>>>
>>> Paul
>>>
>>>
>>>
>>>
>>> On 6 Nov, 16:31, "Ayende Rahien" <[EMAIL PROTECTED]> wrote:
>>> > LOL
>>> >
>>> >
>>> >
>>> > On Thu, Nov 6, 2008 at 6:06 PM, Paul Cowan <[EMAIL PROTECTED]> wrote:
>>> > > Excellent,
>>> >
>>> > > I'll resist the urge to say that you should write a BOOk about this,
>>> I'm
>>> > > guessing you may have heard it before!!!
>>> >
>>> > > 2008/11/6 Ayende Rahien <[EMAIL PROTECTED]>
>>> >
>>> > > You need to create a meta method that accepts a params of
>>> > >> ReferenceExpression.this will allow you to skip the strings.
>>> > >> The meta method will be responsible only for translating the call
>>> from RE
>>> > >> to strings, and generating a new method call to the real Tasks
>>> method
>>> >
>>> > >> On Thu, Nov 6, 2008 at 7:25 AM, dagda1 <[EMAIL PROTECTED]> wrote:
>>> >
>>> > >>> I have the following dsl with the help of rhino DSL
>>> >
>>> > >>> Install "component":
>>> > >>> Description "blah"
>>> > >>> Svn "https://server.com"
>>> > >>> Tasks "one", "two", "three"
>>> >
>>> > >>> I am unhappy with it because I think I am over using strings.
>>> >
>>> > >>> Can anyone suggest a better way?
>>> >
>>> > >>> Also can anyone tell me how to read in the multiple values for the
>>> > >>> tasks
>>> > >>> Section on the last line?
>>> >
>>> > >>> Cheers- Hide quoted text -
>>> >
>>> > - Show quoted text -
>>>
>>>
>>
>>
>>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Rhino Tools Dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/rhino-tools-dev?hl=en
-~----------~----~----~----~------~----~------~--~---