Education Technology

Boo gotchas for beginners

Unlike what I mentioned in my previous post, I ended up trying Boo first. I will delve on the reason in another post. The objective of this post is to document the problems I had getting used to Boo syntax. None of the problems were big, just some missing punctuations :) And I did not face any issues with the significant space.

Empty array vs. Empty list

An empty list is


and an empty map is


And empty array is


as it would cause ambiguity with a function / closure.

Type declaration vs. Initialisation


_myDict as Dictionary[of string, object]


_myDict = Dictionary[of string, object]()

Assigning a Type vs. invoking a function

When you are calling a function don’t forget the brackets at the end.


fs = file.OpenRead


fs = file.OpenRead()

If you make this mistake you will get errors like:

‘<method/property>’ is not a member of ‘’. (BCE0019)

Colon is the new semicolon

Remember the times when a missing semicolon used to be causing most compile errors, well, in boo it will be the missing colon which signifies a beginning of a block.


while ((line = filestream.ReadLine()) != null)



while ((line = filestream.ReadLine()) != null):


If you forget the colon, you will get an error like:

Unexpected token: m. (BCE0043) Unexpected token: <INDENT>. (BCE0043) expecting "EOF", found '<DEDENT>'. (BCE0044)

Function definition in a script file

Maybe a no-brainer for python gurus, but if you have a script file, i.e. a file with no class, just instructions; functions are to be defined near the top of the script and called after it is def’ed.

You can’t mix Boo with C# in same project

This is my mistake, but looking at samples having groovy and java files in same project; I blindly assumed that the same applies to Boo as well.

Intellisense / auto-complete does not work well.

Given the dynamic nature of Boo and maybe some bugs in SharpDevelop, it is not a great experience if you rely heavily on intellisense.

Embedding special characters in a string

Boo follows the python way of embedding special characters in string and not c#.


s = @“C:\path\to\dir\”


s = “““C:\path\to\dir\”””

Embedding values in strings

The syntax is slightly weird, but useful nonetheless. You need to use both $ and enclose the variable in curly braces.

print “processing ${dir.Name}”

Still can’t find a way to pattern match and assign in the same line

I think this is possible, but I can’t figure a way to match a strung and assign the values to 2 variables.

I am trying to do something like, below and a few variations without luck:

key, val = /(?[^=\s]+)\s*=\s*"(?.+)"\s*$/.Match(line)

If the regex would have been simpler I could have used the Split instead of Match and things would have worked.

I ended up with something like:

data = /(?[^=\s]+)\s*=\s*"(?.+)"\s*$/.Match(line)

key, val = data.Groups[“key”].Value, data.Groups[“value”].Value

Embedding spaces in a regular expression patterns

As seen in the regex sample above, take extra care when you want to match a space. Use \s instead of a literal space.