static void Main()
{
Action<string> myAction = SomeMethod;
myAction("Hello World");
myAction.Invoke("Hello World");
}
static void SomeMethod(string someString)
{
Console.WriteLine(someString);
}
Run Code Online (Sandbox Code Playgroud)
上面的输出是:
Hello World
Hello World
Run Code Online (Sandbox Code Playgroud)
现在我的问题是
如果有的话,调用Action的两种方法有什么区别?
这个比那个好吗?
何时使用哪个?
谢谢
我试图解决一个问题,在我看来,你无法将开放的db2连接传递给子shell.
我的代码组织如下:
驱动程序脚本(中my_driver.sh)
# foo.sh defines baz() bar(), which use a db2 connection
# Also the "$param_file" is set in foo.sh!
source foo.sh
db2 "connect to $dbName USER $dbUser using $dbPass"
function doit
{
cat $param_file | while read params
do
baz $params
bar $params
done
}
doit
Run Code Online (Sandbox Code Playgroud)
我简化了我的代码,但上面的内容已经足够了.我从上面开始:
my_driver.sh
Run Code Online (Sandbox Code Playgroud)
现在,我真正的问题是子shell中没有db2连接:
我累了:
. my_driver.sh
Run Code Online (Sandbox Code Playgroud)
没有帮助
如果我从命令行手动执行:
source foo.sh
Run Code Online (Sandbox Code Playgroud)
我$params手动设置:
baz $params
bar $params
Run Code Online (Sandbox Code Playgroud)
然后它确实有效!如此看来,doit还是别的什么行为,如果bar和baz从子shell执行.
如果我能以某种方式弄清楚如何将db2 open连接传递给subshell,那我会很高兴.
否则,这些shell函数在我看来它们在子shell中运行.有办法吗?
我正在阅读Think Python:如何像计算机科学家一样思考.笔者使用"援引"与方法和"呼"与功能.
这是一个惯例吗?如果是这样,为什么要做出这种区分呢?为什么称函数被调用,但据说可以调用方法?