标签: return-value

如何从函数返回多个值?

在支持它的语言中返回多个值的规范方法通常是tupling.

选项:使用元组

考虑这个简单的例子:

def f(x):
  y0 = x + 1
  y1 = x * 3
  y2 = y0 ** y3
  return (y0, y1, y2)
Run Code Online (Sandbox Code Playgroud)

但是,随着返回值的增加,这很快就会出现问题.如果您想要返回四个或五个值,该怎么办?当然,你可以保持它们的组合,但很容易忘记哪个值在哪里.在任何想要接收它们的地方解压缩它们也相当丑陋.

选项:使用字典

下一个合乎逻辑的步骤似乎是引入某种"记录符号".在python中,显而易见的方法是通过a dict.

考虑以下:

def g(x):
  y0 = x + 1
  y1 = x * 3
  y2 = y0 ** y3
  return {'y0': y0, 'y1': y1 ,'y2': y2}
Run Code Online (Sandbox Code Playgroud)

(编辑 - 要清楚,y0,y1和y2只是作为抽象标识符.正如所指出的,在实践中你会使用有意义的标识符)

现在,我们有一个机制,我们可以在其中投射返回对象的特定成员.例如,

result['y0']
Run Code Online (Sandbox Code Playgroud)

选项:使用课程

但是,还有另一种选择.我们可以返回一个专门的结构.我已经在Python的上下文中对此进行了构建,但我确信它也适用于其他语言.事实上,如果你在C工作,这可能是你唯一的选择.开始:

class ReturnValue:
  def __init__(self, y0, y1, y2):
     self.y0 = y0
     self.y1 = y1
     self.y2 = y2

def …
Run Code Online (Sandbox Code Playgroud)

python coding-style return return-value

1011
推荐指数
12
解决办法
111万
查看次数


如何使方法返回类型通用?

考虑这个例子(典型的OOP书籍):

我有一个Animal班级,每个人都Animal可以有很多朋友.
和子类一样Dog,Duck,Mouse等它添加特定的行为一样bark(),quack()等等.

这是Animal班级:

public class Animal {
    private Map<String,Animal> friends = new HashMap<>();

    public void addFriend(String name, Animal animal){
        friends.put(name,animal);
    }

    public Animal callFriend(String name){
        return friends.get(name);
    }
}
Run Code Online (Sandbox Code Playgroud)

这里有一些代码片段有很多类型转换:

Mouse jerry = new Mouse();
jerry.addFriend("spike", new Dog());
jerry.addFriend("quacker", new Duck());

((Dog) jerry.callFriend("spike")).bark();
((Duck) jerry.callFriend("quacker")).quack();
Run Code Online (Sandbox Code Playgroud)

有什么办法可以使用泛型来返回类型来摆脱类型转换,这样我就可以说了

jerry.callFriend("spike").bark();
jerry.callFriend("quacker").quack();
Run Code Online (Sandbox Code Playgroud)

这里有一些返回类型的初始代码作为一个从未使用过的参数传递给方法.

public<T extends Animal> T callFriend(String name, T unusedTypeObj){
    return (T)friends.get(name);        
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在运行时找出返回类型而不使用额外的参数instanceof?或者至少通过传递类型的类而不是虚拟实例. …

java generics return-value

557
推荐指数
11
解决办法
64万
查看次数

如何从Bash函数返回字符串值

我想从Bash函数返回一个字符串.

我将在java中编写示例以显示我想要做的事情:

public String getSomeString() {
  return "tadaa";
}

String variable = getSomeString();
Run Code Online (Sandbox Code Playgroud)

以下示例适用于bash,但有更好的方法吗?

function getSomeString {
   echo "tadaa"
}

VARIABLE=$(getSomeString)
Run Code Online (Sandbox Code Playgroud)

string bash function return-value

438
推荐指数
10
解决办法
31万
查看次数

如何使用POSIX执行命令并在C++中获取命令输出?

我正在寻找一种方法来获取从C++程序中运行命令的输出.我已经看过使用system()函数,但这只会执行一个命令.这是我正在寻找的一个例子:

std::string result = system("./some_command");
Run Code Online (Sandbox Code Playgroud)

我需要运行一个任意命令并获取其输出.我看过Boost.org,但我找不到任何可以满足我需要的东西.

c++ posix system process return-value

427
推荐指数
8
解决办法
42万
查看次数

Bash函数中返回和退出之间的区别

BASH函数中的returnand exit语句与退出代码有什么区别?

bash return function return-value exit

399
推荐指数
8
解决办法
37万
查看次数

如何在不首先将其分配给局部变量的情况下索引函数返回的MATLAB数组?

例如,如果我想从中读取中间值magic(5),我可以这样做:

M = magic(5);
value = M(3,3);
Run Code Online (Sandbox Code Playgroud)

得到value == 13.我希望能够做到这样的事情之一:

value = magic(5)(3,3);
value = (magic(5))(3,3);
Run Code Online (Sandbox Code Playgroud)

免除中间变量.然而,MATLAB抱怨Unbalanced or unexpected parenthesis or bracket在第一个括号之前3.

是否可以在不首先将其分配给变量的情况下从数组/矩阵中读取值?

indexing matlab matrix return-value variable-assignment

350
推荐指数
7
解决办法
7万
查看次数

Bash函数中的返回值

我正在使用bash脚本,我想执行一个函数来打印返回值:

function fun1(){
  return 34
}
function fun2(){
  local res=$(fun1)
  echo $res
}
Run Code Online (Sandbox Code Playgroud)

当我执行时fun2,它不会打印"34".为什么会这样?

bash function return-value

267
推荐指数
9
解决办法
33万
查看次数

如何从VBA函数返回结果

如何从函数返回结果?

例如:

Public Function test() As Integer
    return 1
End Function
Run Code Online (Sandbox Code Playgroud)

这给出了编译错误.

如何让这个函数返回一个整数?

excel vba return function return-value

255
推荐指数
3
解决办法
75万
查看次数

函数应该返回null还是空对象?

从函数返回数据时的最佳做法是什么.返回Null或空对象更好吗?为什么要一个人做另一个呢?

考虑一下:

public UserEntity GetUserById(Guid userId)
{
     //Imagine some code here to access database.....

     //Check if data was returned and return a null if none found
     if (!DataExists)
        return null; 
        //Should I be doing this here instead? 
        //return new UserEntity();  
     else
        return existingUserEntity;
}
Run Code Online (Sandbox Code Playgroud)

让我们假设在这个程序中有效的案例,数据库中没有该GUID的用户信息.我想在这种情况下抛出异常是不合适的?此外,我的印象是异常处理可能会损害性能.

.net c# function return-value

209
推荐指数
9
解决办法
9万
查看次数