2014-11-23 2 views
10

나는 많은 값을 생성하고 고유 한 것들만 사용해야하는 문제가 있습니다. --harmony 플래그가있는 노드 js를 사용하고 있으며 조화 컬렉션에 액세스 할 수 있으므로 Set이 옵션 일 수 있다고 결정했습니다. 뿐만 아니라,집합에 대한 사용자 정의 객체 평등 (es6)

'use strict'; 

function Piece(x,y){ 
    this.x = x 
    this.y = y 
} 

function Board(width,height,pieces){ 
this.width = width 
this.height = height 
this.pieces = pieces 
} 

function generatePieces(){ 
return [ 
    new Piece(0,0), 
    new Piece(1,1) 
] 
} 

//boardA and boardB are two different but equivalent boards 
var boardA = new Board(10,10,generatePieces()) 
var boardB = new Board(10,10,generatePieces()) 

var boards = new Set() 
boards.add(boardA) 
boards.has(boardB) //return true 
이제

일반적으로 다른 언어로이를 달성하기 위해, C#을 말, 내가이 기능을 동일 구현해야 기대 : 내가 무엇을 찾고

은 다음 예제와 유사 뭔가 Board와 Piece 모두를위한 해시 코드 생성 함수로서. 이후 기본 객체 평등이 참조를 기반으로 할 것으로 기대합니다. 또는 특수 불변 값 유형 (예 : 스칼라의 사례 클래스)을 사용하십시오.

내 개체를 평등하게 정의하여 내 문제를 해결할 수있는 방법이 있습니까?

답변

8

내 개체를 평등하게 정의하여 내 문제를 해결할 수있는 방법이 있습니까?

아니요. some discussion about this on the mailing list이 있습니다. 결과는 다음과 같습니다.

  • 해시 함수에 따라 개체를 원시 값으로 변환하는 Set/Map 위에 자신 만의 설정 /지도 추상화를 만듭니다.
  • value objects coming in ES7을 기다리십시오.
+0

감사합니다. 나는 이것이 사실이라고 느꼈다. 토론에 대한 링크는 매우 유용합니다. –

-2

이렇게하면 작업하는 것과 같은 생성자를 위해 수행됩니다.

var sameInstance = function(obj1, obj2){ 
    return obj2 instanceof ob1.constructor; 
}; 

일부 다른 유형의 객체는 사용자가 다른 것이 필요할 수도 있지만 필요한 경우에는 정상이어야합니다.

위의 내용은 함수 형식에서 필요한 것입니다. Set을 사용하려면 Set 개체를 상속 받아 has 메서드를 has으로 재정의해야합니다.

+0

나는 동등한 함수를 찾고 있지 않으며, has 메소드의 동작을 변경하려고하지도 않는다. 그것은 단지 예일뿐입니다. 저는 제 자신의 객체에 대한 평등을 정의 할 수 있기를 바랍니다. 그렇게하면 복제 된 객체가 집합 내에 포함되지 않습니다. –

+0

사과 마이크. –

+0

문제 없어요! 나는 그 답을 고맙게 생각한다. 너무 거칠게 들리려고하는 것이 아니라 그냥 분명히하고 싶었습니다. –