关于函数的点运算符

时间:2010-12-16 14:20:29

标签: programming-languages

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

函数blah返回type2

类型2看起来像这样

{ 数据

数 }

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

我遇到了一个方便有这种情况的情况,而不是制作一个中间变量,你只需要确保你返回这个类型。

我知道我可以添加一个“get”函数来获取该类型的特定数字变量,但这是一个人必须添加的附加函数,所以我将其作为一个选项排除(因为我可以返回使用变量进行类型和访问并不需要新的函数。

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

编辑#2:出于某种原因,我觉得你不能对函数执行点操作,(我不关心括号,我只是想举一个例子)

编辑#3:这是否有名称或者它仍然只是一个点操作?

7 个答案:

答案 0 :(得分: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 该名称通常是成员访问,因为您所做的只是访问返回值的成员。不过,这可能因语言而异。

答案 1 :(得分:1)

在大多数语言中你都可以Blah().Member ...一对括号的输入不会杀了你,是吗?这些语言包括C,C ++,Java,C#等。

答案 2 :(得分:1)

是的,据我所知,大多数现代语言(如果不是大多数语言)都支持这一点。

答案 3 :(得分:1)

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

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

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

你可以get_foo().bar返回栏

答案 4 :(得分:1)

任何允许函数返回对象/结构的语言都会支持...而像Ruby这样的语言(()是可选的)会使它与你所选择的一样(blah.number而不是blah().number)。

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

答案 5 :(得分:1)

如果要从现有函数中创建新函数,可以使用lambda表达式。例如,在C#中,它是var fooblah = (x => foo(x).blah);显然,如果语言中存在重载,如果不提供参数列表,则无法执行此操作。

答案 6 :(得分: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};
}