在支持它的语言中返回多个值的规范方法通常是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) main()
在C和C++中定义函数的正确(最有效)方法是什么- int main()
或void main()
- 为什么?如果int main()
那么return 1
或return 0
?
这个问题有很多重复,包括:
main()
函数的有效签名是什么?main()
函数void main()
和int main()
?main()
在C++中的签名main()
? - 对于C++,确实有一个非常好的答案.main()
C语言中的函数样式main()
C中的方法类型int main()
vs void main()
在C中有关:
考虑这个例子(典型的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
?或者至少通过传递类型的类而不是虚拟实例. …
我想从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) 我正在寻找一种方法来获取从C++程序中运行命令的输出.我已经看过使用system()函数,但这只会执行一个命令.这是我正在寻找的一个例子:
std::string result = system("./some_command");
Run Code Online (Sandbox Code Playgroud)
我需要运行一个任意命令并获取其输出.我看过Boost.org,但我找不到任何可以满足我需要的东西.
BASH函数中的return
and exit
语句与退出代码有什么区别?
例如,如果我想从中读取中间值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
.
是否可以在不首先将其分配给变量的情况下从数组/矩阵中读取值?
我正在使用bash脚本,我想执行一个函数来打印返回值:
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Run Code Online (Sandbox Code Playgroud)
当我执行时fun2
,它不会打印"34".为什么会这样?
如何从函数返回结果?
例如:
Public Function test() As Integer
return 1
End Function
Run Code Online (Sandbox Code Playgroud)
这给出了编译错误.
如何让这个函数返回一个整数?
从函数返回数据时的最佳做法是什么.返回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的用户信息.我想在这种情况下抛出异常是不合适的?此外,我的印象是异常处理可能会损害性能.