4 ms·
Btw, there are a number of ways to write that expression depending on the complexity of the function Short syntax: Enum.map [1,2,3], &(&1 * &1) Long synta
by tsukaisute 9y ago
Btw, there are a number of ways to write that expression depending on the complexity of the function
Short syntax:
Enum.map [1,2,3], &(&1 * &1)
Long syntax:
Enum.map [1,2,3], (fn num ->
num * num
end)
Or even:
square_me = &(&1 * &1)
Enum.map [1,2,3], square_me
square_me_too = fn(num) -> num * num end
Enum.map [1,2,3], square_me_too
Defining a function separately (e.g. even in another module) and referencing it:
def square(num) do
num * num
end
def doing_something() do
...
Enum.map [1,2,3], &square/1
Enum.map [1,2,3], &SomeOtherModule.square/1
...
end
- hartator 9y agoyeah and in Ruby, you can do: class Array def square map {|e| e * e} end end Why storing code in a seperate module is a superior way than storing code in its class?
- grzm 9y agoYou've now altered a global object which other code may rely on. Indeed, you may overwrite someone else's Array#square method (or have yours overwritten). As a separate module, the additional code is logically distinct. You can find many discussions about monkey-patching elsewhere. It's not my intent here to argue one way or the other, just to answer your question as to why one may choose package the code as a separate module.
- tsukaisute 9y agoIf it is to be reused by other modules, or if it is complex (and likely itself needs to be split up into smaller functions) Think of: items = ["file_a", "file_b", "file_c"] Enum.map items, &HelpfulDownloaderModule.download/1 download/1 is probably pretty complex and/or can be of use in other pieces of code.