2017-09-18 1 views
1

C#에서는 확장 객체를 사용하여 런타임에 정의 된 필드가있는 동적 객체를 가질 수 있습니다. 예 : 당신이 볼 수 있듯이, 접촉 객체가 동적Julia는 동적 "expando 객체"를 지원합니다. C#?

dynamic contact = new ExpandoObject(); 
contact.Name = “Patrick Hines”; 
contact.Phone = “206-555-0144”; 

, 의미에서 우리가 이전 오브젝트의 구조를 선언하지 않고 객체의 필드를 설정할 수 있습니다. 내가 그것을 이해의 OBJ 객체는 필드 prop1와 유형에서 작성해야합니다,

function setProp1(obj) obj.prop1=1 end 

그러나 : 나는 우리가 같이 선언 된 유형하지 않고 매개 변수/변수를 가질 수 있습니다 줄리아의 이해합니다. prop1이 어딘가에 필드로 선언되지 않은 경우 setProp1prop1 필드를 동적으로 설정할 수 없습니다. 전체 역 동성을 원한다면 성능에 대해 걱정하지 않으려 고합니다. 줄리아에서 "expando 객체"를 만드는 방법이 있습니까?

+2

[이 페이지] (https://docs.julialang.org/en/release-0.4/manual/noteworthy-differences/)에서는 ['dict'] (https://docs.julialang.org/)를 사용하는 것이 좋습니다. en/release-0.4/stdlib/collections/# Base.Dict). * "Julia의 유형은 런타임에 필드를 동적으로 추가하는 것을 지원하지 않습니다."* –

+0

언젠가보다 편리한 구문이 생성되기를 바랍니다. expando 객체의 구문은 파이썬이나 다른 완전한 동적 언어에서 오는 피플을 도울 수 있습니다. – gabomgp

+0

@RobertHarvey 오래된 문서 (0.4)를 안정적으로 링크했습니다 (현재 0.6) -> https://docs.julialang.org/en/stable/manual/noteworthy-differences/ (예를 들어, 파이썬과의 12 가지 차이점이 있습니다. 0.4 및 0.6에서 10) pls 귀하의 의견을 편집하고 내 제거합니다 :) – Liso

답변

2

아니요, 현재 정의되지 않은 필드 이름에 할당하여 새 필드를 동적으로 만들 수 없습니다. 나중에 #1974: allow overloading of a.b field access syntax과 같은 기능으로 가능할 수도 있습니다. 하지만 현재 Julia 2.0 + 이정표에 태그가 지정되어 있습니다. 최우선 순위는 아니며 발생할 수도 있고 그렇지 않을 수도 있습니다.

@expando contact.Name = "foo"contact[:Name] = "foo"으로 변환되는 것처럼 필드 액세스를 dict-like 구문으로 변경하는 매크로를 만들 수는 있지만 사전 및 색인 구문을 직접 사용하는 것이 더 쉽고 쉽습니다.

관련 문제