In my head at least, I've always had a pretty good idea of value vs reference passing with respect to functions. I'm going through Scala though and it appears its concept of call by name, is related but its own distinct concept
For example in C# there exists the ref keyword, and in Scala there exists the call by name => operator.
It's my understanding that the ref keyword - roughly at least - serves to pass a pointer to a piece of data, rather than that piece of data itself. i.e. when used with an Integer datatype, if you modify the Integer inside the function, the Integer will be affected on the callee side as well.
Call by name on the hand describes an evaluation strategy where any expressions in an argument, will be delayed until the expressions are used inside the function.
Does my understanding seem correct? If so, is it just so happens that these concepts have related names, or am I not seeing part of the picture? Thanks!