2010-12-16 12 views
0

これは可能かどうかわかりませんが、関数自体にドット演算子を使用できる言語はありますか?私は例を挙げます。この関数上のドット演算子

{ データ

数 }

私は何とかを呼び出すときのようTYPE2

タイプ2が見える戻り何とか

機能はblah.numberをサポートする任意の言語が存在するので、それが関数呼び出しを行い、type2を取得すると、numberを取得し、それを返します。これが明白な答えであれば申し訳ありませんが、私はそれをGoogleに語る良い方法を考えることさえできませんでした。

私はちょうどあなたがタイプを返すことを確認する中間変数を作るのではなく、それを持っていると便利である状況に遭遇しました。

私は、特定の数値変数をその型から得る「取得」関数を追加することができますが、それは誰かが追加しなければならない追加関数なので、変数を使用した型とアクセスは、実際には新しい関数の必要性がありません)。

編集:私は馬鹿のように感じる.....

EDIT#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

PHPを除いて、すべての式を許可するのではなく、一部の操作(インデックスなど)が単純変数に制限されているという点で(imho)は壊れています。 @onaclov:あなたは関数からメンバーを取得せず、関数を適用していて、変数に名前のない/バインドされていない値を返し、その値のメンバーにアクセスします。 – delnan

答えて

1

は、まあ、これはCで動作します。

編集#3 について名前は、一般的にあなたが行うすべては、戻り値のメンバーにアクセスすることがあるため、メンバーアクセスだろう。しかし、これは言語によって異なる可能性があります。

+0

明らかにエイダはそれをします、私は実際にそれが終わったと思った時間を考えることができません....素早い答えをありがとう。 – onaclov2000

+0

フォローアップありがとう! – onaclov2000

1

ほとんどの言語でできることBlah().Member ...カッコのペアの入力はあなたを殺さないだろうか?これらの言語にはC、C++、Java、C#などがあります。

1

私の知る限り、現代のほとんどの言語(ほとんどの言語では一般的ではないが)がこれをサポートしています。

0

Er ...つまり、クラスや構造体を返すようなことですか?

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#ではたぶん私はあなたを誤解し、ほとんどの言語で、あなたはすでにそれを行うことができます。例えばJavaで

、あなたは関数get_fooを(持っている場合)タイプfooのオブジェクトを返すと、fooが

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

として定義されますがget_foo().bar戻っバー

1

ことを可能にする任意の言語を行うことができますRubyのような言語(()はオプション)は、あなたがちょうどあなたのようになります(blah().numberの代わりにblah.number)。

括弧を避けるもう1つの方法は、プロパティまたは同等のイディオムを使用することです。だから、C#、VB.NET、およびPythonでも可能です。

1

既存の関数から新しい関数を作成したい場合は、ラムダ式を使用することができます。たとえば、C#では、var fooblah = (x => foo(x).blah)となります。明らかに、言語で使用可能なオーバーロードがある場合は、引数のリストを指定しないと実行できません。

関連する問題