Phu
| 2 minutes | Tags:
scala
Call-by-value - Call-by-name
- CBV: arguments are evaluated before substituting the function call with the function’s RHS and the parameters with values
- CBN: substituting function and parameters then evaluating parameters
- By default, parameters are CBV. Use
=>, e.g.(x: Int, y: => Int), for CBN def: by-name -val: by-value
Tail recursion:
- When a recursive function calls itself in the same form, so the call stack can be reused.
- In other words, there’s no need to store immediate values, arguments for the next call can be put into the existing stack frame.
For
for expression <=> flatMap, withFilter, and map
Methods
To define a prefix operator, write: def unary_- : <type> = {}, the space before : is required to not make the colon a part of the identifier.
Only 4 operators can be used: + - ! ~
To refer to a method foo from a function foo inside another method, write like this
trait Bar {
self =>
def foo: T
def waz: U = {
def foo = self.foo // or like Java: Bar.this.foo
}
}Only the primary constructor of a class can call the superclass constructor.
Every auxiliary constructor must invoke another constructor as its first action.
Traits further to the right take effect first: the method at the rightest is called first; if it calls super, it invokes the method in the trait to its left.