run은 두가지 방식으로 호출할 수 있다.
첫번째 방식은 매개변수 람다식에서 ()->R 형태로 실행하는 것이고
두번째는 매개변수 람다식에서 T.()->R의 확장함수 형태로 실행하는 것이다.
두 방식 모두 함수 실행 결과를 반환한다.
run은 apply와 같이 this를 이용해서 객체에 접근한다.
apply는 apply를 호출한 객체 자신을 반환해야 한다. 다른 식은 반환할 수 없다. 이러한 apply와 달리 run은 반환하고 싶은 값을 반환할 수 있다. 따라서 변수에 값을 할당할 수 있다.