2012-07-20 3 views
0

자바 스크립트에 상응하는 구문이 있습니까? 그렇지 않다면 어떻게 하나를 만들 것입니까?하스켈의 자바 스크립트 용 삽입 연산자

What does the : infix operator do in Haskell?

+0

연결하려는 대상은 무엇입니까? –

+5

'(:)'연산자는 일반적으로 하스켈에서 유일한 중온 연산자가 아니기 때문에 보통 "단항 연산자"라고 불립니다 (예를 들어,'+'는 중절 연산자이기도합니다). – dflemstr

답변

4

자바 스크립트를 목록 형식을 가지고 있지 않지만, Array의가 있습니다

다음은 중위 연산자는 하스켈에서 수행하는 작업에 대한 간단한 설명입니다.

당신은 사용할 수 있습니다 ...

var newArr = [val].concat(arr); 

양자 택일로, 당신은 배열에 씁니다 unshift()를 사용할 수 있지만 원본을 변이합니다.

JavaScript에는 : 연산자, 연산자 오버로딩 또는 연산자와 비슷한 메서드가 없으므로 하스켈과 비슷한 구문을 사용할 수 없습니다.

+0

중위 연산자를 에뮬레이션하는 방법에 대한 예제가있는이 링크를 찾았습니다. http://www.techtangents.com/emulating-infix-operator-syntax-in-javascript/ –

+0

@LeilaHamon 저것은 약간의 진흙이지만 작동하는 경우 :) – alex

+0

링크가 작동하지 않지만 페이지가 [아카이브에 있음] (https://web.archive.org/web/20140610003932/http://www.techtangents.com/emulating-infix-operator) -syntax-in-javascript /). – dfeuer

0

이 예쁜 아니지만, 당신이 그렇게 코드가 이미 this article on emulating infix operators in JS에 연결 라일라 파문을 보았다

function nfx(firstArg, fn, secondArg){ 
    return fn(firstArg, secondArg); 
} 

// Usage 

function plus(firstArg, secondArg) { 
    return firstArg + secondArg; 
} 

nfx(1, plus, 2); 
2

산문처럼 읽고 중위 원하는 위치 장소에서 가독성에 도움이 될 수 있습니다.

그러나 나는 다른 사람들에게 유용한 예가 될 것이라고 생각했다.

다음은 NumberBoolean 프로토 타입을 해킹하여 4 < 5 < 10과 같은 연결 삽입 식을 처리하는 방법입니다.

더 많은 프로토 타입에 더 많은 방법을 적용하여 더 확장 할 수 있습니다. 그것은 약간 못 생겼지 만 쿼리를 간략하게 만드는 데 유용 할 수 있습니다.

//Usage code 
(4) .gt (6) .gt (4) //false 

(100) .lt (200) .lt (400) . gt(0) . gt(-1)//true 

(100) [ '>' ] (50) [ '<' ] (20)//false 



//Setup Code 
(function(){ 

    var lastVal = null; 


    var nP = Number.prototype 
    var bP = Boolean.prototype 

    nP.gt = function(other){ 
    lastVal = other; 
    return this > other; 
    } 

    nP.lt = function(other){ 
    lastVal = other; 
    return this < other; 
    } 

    bP.gt = function(other){ 
    var result = lastVal > other; 
    lastVal = other; 
    return result; 
    } 

    bP.lt = function(other){ 
    var result = lastVal < other; 
    lastVal = other; 
    return result; 
    } 

    bP['<'] = bP.lt 
    bP['>'] = bP.gt 
    nP['<'] = nP.lt 
    nP['>'] = nP.gt 


})()