Just remember that everything in tcl is basically a string (I guess you could 
argue about that, but it's a helpful notion I found).
White spaces delimit arguments and square brackets indicate a nested tcl 
command. double quotes are used to explicitly define a string allowing 
substitution, while curly braces won't allow substitution.

so:
   puts hello
works as well as:

   puts "hello"
or
   puts {hello}

this will throw an error as it interprets "world" as a second argument to the 
puts command (which is expected to be a IO channel:
   puts hello world
so out come the quotes:
   puts "hello world"
or braces:
   puts {hello world}

to see the difference between quotes and braces:
   puts "the current frame is [frame]"
where [frame] is a nested tcl command, and because it's inside of double 
quotes, it will be evaluated:
--> the current frame is 1

with braces the nested command is not evaluated:
puts {the current frame is [frame]}
--> the current frame is [frame]

so when you put python syntax into a label, you essentially run a tcl command 
called "python" followed by n argument which is the python syntax. And if that 
syntax contains stuff like square brackets, tcl might try and evaluate it as a 
nested command. And that's where braces come to the rescue to make sure tcl 
doesn't try to mess with the python syntax.





On Mar 9, 2011, at 7:58 AM, Nathan Rusch wrote:

> It’s good practice to do it all the time, just to help make things clearer 
> and avoid the potential for pesky errors.
>  
> -Nathan
> 
>  
> From: Michael Havart
> Sent: Tuesday, March 08, 2011 10:24 AM
> To: Nuke Python discussion
> Subject: Re: [Nuke-python] knob syntax
>  
> Ok that's clever, thanks
> When exactly you need to put the curly braces ? maybe it can improve my 
> autolabel callbacks...
>  
> thanks,
> Michael
>  
> 2011/3/8 Ean Carr <[email protected]>
> That's because you're confusing the tcl interpreter. Try curly braces.
> 
> [python {nuke.thisNode()["size"].value()}]
> 
> -E
> 
> 
> On Tue, Mar 8, 2011 at 2:45 PM, Michael Havart <[email protected]> 
> wrote:
> and also, in autolabel or expressions this will not work:
>  
> [python nuke.thisNode()["size"].getValue()]
>  
> but this will work:
>  
> [python nuke.thisNode().knob("size").getValue()]
>  
>  
>  
>  
>  
> 2011/3/8 Alexander Jones <[email protected]>
> 
> 
> 
> On 8 March 2011 06:19, Ben Dickson <[email protected]> wrote:
> node['blah'].value()
> 
> ..is less typing, so I use that over the functionally identical
> node.knob("blah").value()
> 
> They're not identical -- ["blah"] will raise a KeyError for a missing knob, 
> whereas knob("blah") will return None. Subtle!
>  
> 
> I use node.knobs() occasionally to iterate over all knobs (or use
> node.knobs().keys() ) 
> 
> Incidentally I use [''] over [""], because the first can be typed
> without shift (on UK/Australian keyboards anyway) - same with ("") which
> can be typed with shift held. Efficiency!...
> 
> John RA Benson wrote:
> > Hey there -
> >
> > Basic question:
> >
> > just curious - if find myself flipping between using syntax like:
> >
> > node.knob('myknob').value()
> > vs:
> > node['myknob'].value()
> >
> > Is there any 'best practices' or preferred way to write that? Sort of like, 
> > do you always use '"' or "'" for quotes...
> >
> > Cheers
> > JRAB_______________________________________________
> > Nuke-python mailing list
> > [email protected]
> > http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
> >
> 
> --
> ben dickson
> 2D TD | [email protected]
> rising sun pictures | www.rsp.com.au
> 
> _______________________________________________
> Nuke-python mailing list
> [email protected]
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
> 
> 
> 
> -- 
> Alexander Jones
> Double Negative R&D
> www.dneg.com
> 
> 
> _______________________________________________
> Nuke-python mailing list
> [email protected]
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
> 
> 
> 
> 
> -- 
> Michael Havart | DMP-ENV | MPC-London
> images: cghub.com | blogspot.com
> cv: linkedin profile | imdb
> 
> 
> _______________________________________________
> Nuke-python mailing list
> [email protected]
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
> 
>  
> 
> _______________________________________________
> Nuke-python mailing list
> [email protected]
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
> 
> 
> 
> 
> 
> _______________________________________________
> Nuke-python mailing list
> [email protected]
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
> _______________________________________________
> Nuke-python mailing list
> [email protected]
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

_______________________________________________
Nuke-python mailing list
[email protected]
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to