2010-12-16 52 views
0

我不知道這是否可行,但是有沒有哪種語言可以在函數本身上使用點運算符。我會舉一個例子。關於函數的點運算符

功能等等返回TYPE2

2型看起來像這樣

{ 數據

數 }當我打電話等等都是有支持blah.number任何語言

,所以當它進行函數調用並獲取類型2時,它會抓取數字並返回該數字。我很抱歉,如果這是一個明顯的答案,但我甚至不能想到一個很好的方式將它告訴谷歌它。

我剛碰到一個情況會很容易有,而不是做一箇中間變量,你只是確保你返回的類型。

我知道我可以添加一個「get」函數來從該類型獲取特定的數字變量,但這是一個額外的函數,有人不得不添加,所以我排除了作爲選項(因爲我可以只是返回使用變量的類型和訪問對於新函數並不是真的需要)。

編輯:我覺得自己像個白癡.....

編輯#2:出於某種原因,我曾在我的頭上,你不能對功能做點作業,(我不在乎關於括號,我只是想舉一個例子)

編輯#3:有沒有這個名稱或它仍然只是一個點操作?

+0

幾乎所有這些?在大多數語言中,'func()'等價於'func'的返回值。或者你在談論咖喱? – nmichaels 2010-12-16 14:26:22

+1

除PHP之外的所有內容,這都是因爲某些操作(例如索引)被限制爲簡單變量而不是允許所有表達式,所以除了PHP之外,它一次又一次地讓我的思想一片譁然。 @onaclov:你沒有從函數中獲取成員,你正在應用函數,它返回一些(未命名/未綁定到變量)值,然後訪問該值的某個成員。 – delnan 2010-12-16 15:02:16

回答

1

那麼這部作品在C如果該函數返回一個像這樣的結構:

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

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

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

我想知道,如果有,做支持這樣的事情任何語言。

關於編輯#3 名稱一般會成員訪問,因爲所有你做的是訪問返回值的成員。儘管這可能會因語言而異。

+0

顯然Ada是這樣做的,我只是想不出一個我已經看到它完成的時間....感謝你的快速回答。 – onaclov2000 2010-12-16 14:48:51

+0

感謝您的跟進! – onaclov2000 2010-12-16 14:57:39

1

在大多數語言中你可以做Blah().Member ......一對圓括號的打字不會殺死你,是嗎?這些語言包括C,C++,Java,C#等。

1

是的,據我所知,大多數現代語言(如果不是大多數語言一般)支持這一點。

0

呃...你的意思是,像返回一個類或結構?

C#

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

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

也許我誤解你,但在大多數語言中,你已經可以做到這一點。

在Java例如,如果你有一個函數get_foo()返回類型FOO的目的,和Foo被定義爲

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

可以做get_foo().bar返回杆

1

在任何語言,它允許一個函數返回一個對象/結構將支持... Ruby等語言(其中()是可選的)將使它完全像你一樣(blah.number而不是blah().number)。

避免括號的另一種方法是使用一個屬性或一個等價的習慣用法......所以C#,VB.NET和Python也會允許這樣做。

1

如果您想從現有函數中創建一個新函數,那麼可以使用lambda表達式。例如,在C#中,它將是var fooblah = (x => foo(x).blah);顯然,如果語言中存在可用的重載,那麼不提供參數列表就無法做到這一點。