2010-12-16 90 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);显然,如果语言中存在可用的重载,那么不提供参数列表就无法做到这一点。