F #에서 고유 한 연산자를 정의 할 수있는 방법이 있습니까?F #에서 고유 한 연산자를 정의 할 수 있습니까?
그렇다면 누군가가 내게이 예제를 줄 수 있습니까? 나는 잠깐 수색했지만 아무 것도 찾을 수 없었다.
F #에서 고유 한 연산자를 정의 할 수있는 방법이 있습니까?F #에서 고유 한 연산자를 정의 할 수 있습니까?
그렇다면 누군가가 내게이 예제를 줄 수 있습니까? 나는 잠깐 수색했지만 아무 것도 찾을 수 없었다.
Yes (예) :
let (+.) x s = [for y in s -> x + y]
let s = 1 +. [2;3;4]
F 번호 연산자에 사용할 수있는 문자는 section 3.7 of the spec에 나열되어 있습니다. 그들은 !%&*+-./<=>@^|~
이고 첫 번째 문자 이후의 문자는 ?
입니다. 우선 순위와 고정 성은 운영자의 첫 번째 특성에 의해 결정됩니다 (스펙 참조).
위에서 수행 한 것처럼 직접 let-bound 연산자를 만들 수 있습니다.이 경우 let-bound 함수처럼 작동합니다. 당신은 또한 유형에 멤버로 정의 할 수 있습니다 :
type 'a Wrapper = Wrapper of 'a with
static member (+!)(Wrapper(x), Wrapper(y)) = Wrapper(x+y)
let w = (Wrapper 1) +! (Wrapper 2)
이 경우, 당신은 연산자를 사용 할 수 있도록 바인딩 기능을 미리 정의 할 필요가 없습니다; F #이 형식에서 찾을 것입니다. 당신이 사용하는 인라인 정의로 특히 잘 활용할 수 있습니다 :
let inline addSpecial a b = a +! b
let w2 = addSpecial w (Wrapper 3)
는 더욱이 촬영, 인라인뿐만 아니라 당신의 유형에 연산자를 만들 수 있습니다, 당신의 인스턴스의 경우에도보다 다양한에서 사용할 수 있도록 귀하의 수업 :
type 'a Wrapper = Wrapper of 'a with
static member inline (+!)(Wrapper(x), Wrapper(y)) = Wrapper(x+y)
let wi = (Wrapper 1) +! (Wrapper 2)
let wf = (Wrapper 1.0) +! (Wrapper 2.0)
let wi2 = addSpecial wi wi
let wf2 = addSpecial wf wf
섹션 4.4 (http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html)에는 중온 연산자 및 허용되는 문자에 대한 몇 가지 추가 정보가 있습니다. – nlucaroni
나중에 참고할 수있는 개념은 연산자 오버로딩이라고합니다. Google F # 및 연산자 오버로딩을 사용하면 주제에 대해 많은 정보를 얻을 수 있습니다. –
감사합니다. –