Programming languages 函数上的点算子

Programming languages 函数上的点算子,programming-languages,Programming Languages,我不知道这是否可行,但有没有任何语言可以在函数本身上使用点运算符。我举个例子 函数blah返回type2 类型2看起来像这样 { 资料 数 } 当我调用blah时,是否有任何语言支持blah.number,因此当它进行函数调用并获取type2时,它会获取number并返回它。如果这是一个显而易见的答案,我很抱歉,但我甚至想不出一个好的方式来用谷歌来表达它 我遇到了这样一种情况,即使用它会更方便,而不是创建一个中间变量,您只需确保返回类型即可 我知道我可以添加一个“get”函数,从该类型中获取特定

我不知道这是否可行,但有没有任何语言可以在函数本身上使用点运算符。我举个例子

函数blah返回type2

类型2看起来像这样

{ 资料

数 }

当我调用blah时,是否有任何语言支持blah.number,因此当它进行函数调用并获取type2时,它会获取number并返回它。如果这是一个显而易见的答案,我很抱歉,但我甚至想不出一个好的方式来用谷歌来表达它

我遇到了这样一种情况,即使用它会更方便,而不是创建一个中间变量,您只需确保返回类型即可

我知道我可以添加一个“get”函数,从该类型中获取特定的数字变量,但这是一个必须添加的附加函数,因此我将其作为一个选项排除在外(因为我只需返回类型并使用变量访问,因此实际上并不迫切需要一个新函数)

编辑:我觉得自己像个白痴

编辑#2:出于某种原因,我脑子里想你不能对函数进行点运算(我不在乎括号,我只是想举个例子)


编辑#3:这个函数有名字吗?还是它仍然只是一个点操作?

如果函数返回这样的结构,这在C中是有效的:

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

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

// call
int a = foo().number;
我想知道是否有任何语言不支持这样的东西

关于编辑#3
该名称通常是成员访问,因为您所做的只是访问返回值的成员。但是,这在不同的语言中可能会有所不同。

如果函数返回如下结构,则这在C中有效:

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

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

// call
int a = foo().number;
我想知道是否有任何语言不支持这样的东西

关于编辑#3
该名称通常是成员访问,因为您所做的只是访问返回值的成员。这在不同的语言中可能有所不同。

在大多数语言中,您可以执行
Blah()。。。键入一对括号不会害死你吧?这些语言包括C、C++、爪哇、C等。

< P>在大多数语言中,你可以做<代码> BLAH()。键入一对括号不会害死你吧?这些语言包括C、C++、爪哇、C等。

YEP,据我所知,大多数现代语言(如果不是大多数语言一般)支持这个。

YEP,据我所知,大多数现代语言(如果不是大多数语言一般支持)。

< P>呃……你的意思是,像返回类或结构? 在
C#


呃…你是说,像是返回一个类或结构

C#


也许我误解了你,但在大多数语言中,你已经可以做到了

例如,在java中,如果有一个函数get_foo()返回foo类型的对象,那么foo定义为

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

你可以做
get_foo().bar
返回bar

也许我误解了你的意思,但在大多数语言中,你已经可以这样做了

例如,在java中,如果有一个函数get_foo()返回foo类型的对象,那么foo定义为

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

您可以执行
get_foo().bar
返回bar

任何允许函数返回对象/结构的语言都将支持该操作。。。像Ruby这样的语言(其中
()
是可选的)将使它完全像你所说的那样(
blah.number
而不是
blah().number


另一种避免使用括号的方法是使用属性或等效的习惯用法。。。因此C#、VB.NET和Python也允许这样做。

任何允许函数返回对象/结构的语言都支持。。。像Ruby这样的语言(其中
()
是可选的)将使它完全像你所说的那样(
blah.number
而不是
blah().number


另一种避免使用括号的方法是使用属性或等效的习惯用法。。。因此,C#、VB.NET和Python也允许这样做。

如果您想从现有函数中生成新函数,可以使用lambda表达式。例如,在C#中,它应该是
var fooblah=(x=>foo(x).blah)
;显然,如果语言中存在可用的重载,那么在不提供参数列表的情况下是无法实现的。

如果要从现有函数中生成新函数,可以使用lambda表达式。例如,在C#中,它应该是
var fooblah=(x=>foo(x).blah)
;显然,如果语言中存在重载,那么在不给出参数列表的情况下,您就不能这样做。

几乎所有参数都可以吗?在大多数语言中,
func()
相当于
func
的返回值。或者你说的是咖喱?除了PHP之外,其他所有的都被破坏了,因为有些操作(例如索引)被限制在简单的变量中,而不是允许所有的表达式。。。我一次又一次地感到困惑@onaclov:你不是从函数中获取成员,你是在应用函数,它返回一些(未命名/未绑定到变量)值,然后你访问该值的一些成员。实际上所有的成员都是吗?在大多数语言中,
func()
相当于
func
的返回值。或者你说的是咖喱?除了PHP之外,其他所有的都被破坏了,因为有些操作(例如索引)被限制在简单的变量中,而不是允许所有的表达式。。。我一次又一次地感到困惑@onaclov:你不是从函数中获取成员,你是在应用函数,它返回一些(未命名/未绑定到变量)值,然后你访问该值的某个成员。显然Ada这样做了,我想不出有哪一次我真的看到它这样做了。。。。谢谢你的快速回答。显然是Ada做的,我只是想不起有哪一次我真的看到了。。。。谢谢你的快速回答。