我不知道这是否可行,但是有没有语言可以在函数本身上使用点运算符。我举个例子。
函数blah返回type2
类型2看起来像这样
{ 数据
数 }
当我调用blah时,是否有任何支持blah.number的语言,因此当它调用函数并获取type2时,它会抓取数字并返回它。我很抱歉,如果这是一个明显的答案,但我甚至想不出一个好的方法来说它谷歌。
我遇到了一个方便有这种情况的情况,而不是制作一个中间变量,你只需要确保你返回这个类型。
我知道我可以添加一个“get”函数来获取该类型的特定数字变量,但这是一个人必须添加的附加函数,所以我将其作为一个选项排除(因为我可以返回使用变量进行类型和访问并不需要新的函数。
编辑:我觉得自己像个白痴...... 编辑#2:出于某种原因,我觉得你不能对函数执行点操作,(我不关心括号,我只是想举一个例子)编辑#3:这是否有名称或者它仍然只是一个点操作?
答案 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};
}