나는 재미를 위해 프로그래밍 언어를 모델링하고 있으며 구문은 스칼라, 특히 함수 정의에 크게 영향을받습니다.
언어 가def
구문 (클래스 메서드)을 통해 정의 된 함수 와 값에 할당 된 익명 함수 (을 사용하여 생성) 를 구분하지 않기 때문에 설계 문제가 발생했습니다 . 구현 과 동작=>
의 차이를 제거합니다 .
결과는 다음 두 가지 정의가 같은 의미입니다.
def square(x: Int) = x*x
val square = (x: Int) => x*x
어떤 정상적인 상황에서 사용되는 후자의 형태에 대한 이유 (즉시 익명 함수 할당은) 없다 - 단순히의 수 의 대신 사용하는 def
형태.
명명 된 함수를 정의하기 위해 이러한 중복 구문을 사용하면 언어의 직교성 또는 다른 디자인 측면이 손상됩니까?
이 솔루션을 사용하면 메소드와 명명 된 함수 ( def
) 를 짧고 직관적으로 정의하고 익명 함수 ()를 짧게 정의 할 수 있으므로이 솔루션을 선호합니다 =>
.
편집 : 스칼라 는 두 가지를 구별합니다 -익명 함수는 def
스칼라에서 정의한 메소드와 다릅니다 . 차이점은 비교적 미묘합니다. 전에 링크 한 게시물을 참조하십시오.
val
표기법을 사용하여 재귀 함수를 정의 할 수 있습니까 ?
fun
재귀 함수를 정의하는 데 사용해야 합니다.
def
. 익명 함수, 예 (x : Int) => x + 1
를 들어 객체이며 객체를로 값에 할당 할 수 있다는 사실의 부작용 일뿐 입니다 val f = ...
. 언어 디자이너는 구문을 허용하지 않기 위해 길 을 떠나야했을 것입니다 . 똑같은 일을하는 두 가지 다른 구문을 지원하려는 노력을 명시 적으로하는 것과는 완전히 다릅니다.
However, assigning existing functions
문장의 끝을 놓친 것 같습니다