diff --git a/julia.html.markdown b/julia.html.markdown index f26694d7..c6e54f70 100644 --- a/julia.html.markdown +++ b/julia.html.markdown @@ -298,31 +298,45 @@ end ## 4. Functions #################################################### -# Use def to create new functions -def add(x, y): - print "x is %s and y is %s" % (x, y) - return x + y # Return values with a return statement +# Use the keyword function to create new functions +function add(x, y) + println("x is $x and y is $y") + x + y # or equivalently: return x + y +end -# Calling functions with parameters add(5, 6) #=> 11 and prints out "x is 5 and y is 6" -# Another way to call functions is with keyword arguments -add(y=6, x=5) # Keyword arguments can arrive in any order. # You can define functions that take a variable number of # positional arguments -def varargs(*args): +function varargs(args...) return args +end varargs(1, 2, 3) #=> (1,2,3) +# You can define functions with optional positional arguments +function defaults(a,b,x=5,y=6) + return "$a $b and $x $y" +end -# You can define functions that take a variable number of -# keyword arguments, as well -def keyword_args(**kwargs): - return kwargs +defaults('h','g') #=> "h g and 5 6" +defaults('h','g','j') #=> "h g and j 6" +defaults('h','g','j','k') #=> "h g and j k" +defaults('h') #=> ERROR: no method defaults(Char,) +defaults() #=> ERROR: no methods defaults() -# Let's call it to see what happens -keyword_args(big="foot", loch="ness") #=> {"big": "foot", "loch": "ness"} +# You can define functions that take keyword arguments +function keyword_args(;k1=4,name2="hello") # note the ; + return ["k1"=>k1,"name2"=>name2] +end + +keyword_args(name2="ness") #=> ["name2"=>"ness","k1"=>4] +keyword_args(k1="mine") #=> ["k1"=>"mine","name2"=>"hello"] +keyword_args() #=> ["name2"=>"hello","k2"=>4] + +#### +#### In progress point +#### # You can do both at once, if you like def all_the_args(*args, **kwargs):