2010-12-16 8 views
0

이것이 가능한지 모르겠지만 함수 자체에서 도트 연산자를 사용할 수있는 언어가 있습니다. 예를 들어 보겠습니다. TYPE2에게 2 형이도트 연산자 on 함수

과 같은

{ 데이터

수 }

내가 blah.number을 지원하는 모든 언어가 어쩌구 전화를 반환 ㅋ

기능, 그래서 함수 호출을하고 type2를 얻었을 때, 숫자를 잡고 반환합니다. 이것이 명백한 대답이라면 미안하지만, 구글로 말하기에 좋은 방법이라고 생각조차 할 수 없다.

나는 그저 그런 변수를 반환하는 중간 변수를 만드는 대신에 그럴만 한 상황에 부딪혔다.

그 유형에서 특정 숫자 변수를 얻을 수있는 "get"함수를 추가 할 수 있다는 것을 알고 있지만 누군가가 추가해야 할 추가 함수이므로 그 값을 옵션으로 배제하고 있습니다. 변수를 사용하는 유형 및 액세스는 실제로 새로운 기능에 대한 절박한 필요성이 없음).

편집 : 나는 바보 같은 느낌 .....

편집 # 2 : 난 당신이 기능에 도트 작업을 할 수없는 내 머리를 가지고 어떤 이유로, (들어 난 상관 없어 괄호에 대해서 나는 단지 예제를 보여주고 자했다.)

편집 # 3 : 이름이 있나요? 아니면 여전히 도트 연산입니까? 나는이 같은 하지 지원 무언가를 어떤 언어가 있는지 알고 싶습니다

struct retval { 
    char * data; 
    int number; 
}; 

retval foo() { 
    // do something and then return an instance of retval 
} 

// call 
int a = foo().number; 

: 함수가이 같은 구조체를 반환하는 경우

+0

실질적으로 모두? 대부분의 언어에서,'func()'는'func'의 반환 값과 같습니다. 아니면 카레에 대해 이야기하고 있습니까? – nmichaels

+1

일부 작업 (예 : 색인 생성)이 모든 표현식을 허용하는 대신 단순한 변수로 제한된다는 점에서 (imho) PHP를 제외하고는 ... 내 마음을 계속해서 반복합니다. @onaclov : 함수에서 멤버를 얻지 못하고, 함수를 적용하고, 변수에 묶이지 않은/명명되지 않은 값을 반환하고, 그 값의 일부 멤버에 액세스합니다. – delnan

답변

1

음이 C에서 작동합니다. 당신이 모두 반환 값의 멤버에 액세스 할 수 있기 때문에 편집 # 소개

3 이름은 일반적으로 멤버 액세스 될 것이다. 언어마다 다를 수 있습니다.

+0

명백하게 Ada는 그것을한다, 나는 단지 내가 실제로 그것을 보았던 시간을 생각할 수 없다. ... 빠른 대답에 대해 당신에게 감사드립니다. – onaclov2000

+0

후속 조치에 감사드립니다. – onaclov2000

1

대부분의 언어에서 Blah().Member 할 수 있습니다 ... 괄호 한 쌍의 타이핑은 당신을 죽이지 않을 것입니까?

1

이 언어에는 C, C++, Java, C# 등이 포함됩니다. 대부분의 현대 언어 (대부분의 언어가 일반적이지는 않지만)가이를 지원합니다.

0

어 ... 클래스 또는 구조체를 반환하는 것과 같은 의미입니까?

private class Blah 
{ 
    public string Data {get; set;} 
    public int Number {get; set;} 
} 

public Blah DoSomething() 
{ 
    return new Blah{Data="Data",Number=1}; 
} 
1

C#에서 어쩌면 내가 당신을 오해하지만, 대부분의 언어에서, 당신은 이미 그 작업을 수행 할 수 있습니다.예를 들어 자바

, 당신은 함수 get_foo이() 형 foo는의 객체를 반환하고 줄을 가능하게하는 모든 언어를

1

반환 get_foo().bar을 할 수

Class Foo{ 
    public int bar; 
    public double baz; 
} 

로 foo에 정의되어있는 경우 객체/구조체를 반환하는 함수는이를 지원할 것입니다. Ruby와 같은 언어 ( ()은 선택 사항 임)는 blah().number 대신에 blah.number과 똑같이 나타납니다.

괄호를 피하는 또 다른 방법은 속성 또는 이와 유사한 관용구를 사용하는 것입니다. 따라서 C#, VB.NET 및 Python도 허용합니다.

1

기존 함수에서 새 함수를 만들려면 람다 식을 사용할 수 있습니다. 예를 들어 C#에서는 var fooblah = (x => foo(x).blah)이됩니다. 언어에 과부하가있는 경우 분명히 인수 목록을 제공하지 않아도됩니다.