2017-02-25 1 views
1

ClearScript으로 인터페이스되는 내 응용 프로그램의 사용자 정의 클래스에 대한 사용자 지정 연산자를 활용하려고합니다.ClearScript의 연산자 오버로드

public class Vector3 { 
    public float x { get; set; } 
    public float y { get; set; } 
    public float z { get; set; } 

    public Vector3(float x, float y, float z) { 
     this.x = x; 
     this.y = y; 
     this.z = z; 
    } 

    public static Vector3 operator +(Vector3 a, Vector3 b) { 
     return new Vector3(a.x + b.x, a.y + b.y, a.z + b.z); 
    } 
} 

내 ClearScript 엔진이 제대로 초기화되고, 나는 제대로 자바 스크립트를 통해 Vector3 객체를 초기화하고, 그에 따라 속성을 수정할 수 있습니다 : 다음은 내 예를 들어, 사용자 정의 클래스의 조각이다.

그러나 Javascript 환경에서 2 Vector3 개체를 초기화하고 Javascript 추가 연산자를 사용하려고하면 추가 연산자가 내 사용자 지정 연산자가 아니라 문자열 연결로 평가됩니다.

예 :

var a = new Vector3(1, 1, 1); 
var b = new Vector3(0, 2, -1); 

var c = a + b; 

print(typeof a); //returns "function" (which is correct) 
print(typeof b); //returns "function" (which is also correct) 

print(typeof c); //returns "string" (should return function) 

가변 cstring ([object HostObject][object HostObject])를 포함하는 대신 Vector3 개체.

ClearScript를 사용하여 기본 Javascript 연산자를 사용하는 대신 Javascript 엔진에서 사용자 지정 연산자를 호출하도록하려면 어떻게해야합니까?

답변

1

JavaScript의 + operator은 숫자 추가 또는 문자열 연결 결과를 반환합니다. 그것을 오버로드 할 수 없습니다. 객체는 피연산자 변환에 영향을 미치기 위해 valueOf 및/또는 toString을 무시할 수 있지만 작업 자체를 재정의 할 방법이 없습니다. 자바 스크립트,

public Vector3 Add(Vector3 that) { return this + that; } 

다음 : 자바 스크립트에서 직접 사용자 정의 연산자를 호출 할 수 없습니다 경우

는, 그것을 감싸는 정상적인 방법을 추가하려고

var c = a.Add(b); 

그것은으로하지 않습니다 우아하지만 작동해야합니다.

+0

Darn, 그게 내가 생각했던 것인데, ClearScript의 측면에서 이상한 일이 있었으면 좋겠다. 나는 당신의 솔루션을 사용할 것입니다, 고마워요! –