Очень примерно и из памяти так как у меня нет кода этого ноутбука:
using (OleDBConnection conn = new OleDbConnection())
{
conn.ConnectionString = "Whatever connection string";
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = conn;
cmd.CommandText = "Select * from CoolTable";
using (OleDbDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
// do something like Console.WriteLine(dr["column name"] as String);
}
}
}
}
В этом случае вы предполагаете, что функция (1) возвращает функцию, а не вызываете эту новую анонимную функцию с аргументом 2.
См. Этот пример:
function sum(a) {
return function(b) {
return a+b;
}
}
// Usage:
window.alert(sum(5)(3)); // shows 8
var add2 = sum(2);
window.alert(add2(5)); // shows 7
window.alert(typeof(add2)); // shows 'function'
Здесь мы создаем функцию sum
, которая принимает один аргумент. Внутри функции sum
мы создаем анонимную функцию
, которая принимает другой аргумент. Эта анонимная функция возвращается в результате выполнения sum
.
Обратите внимание, что эта анонимная функция является прекрасным примером того, что мы называем закрытием . Замыкание - это функция, которая сохраняет контекст, в котором она была создана. В этом случае он сохранит внутри себя значение переменной a
, как и функция примера add2
. Если мы создадим много замыканий, они будут независимыми, как вы можете видеть:
var add3 = sum(3);
var add4 = sum(4);
window.alert(add3(3)); // shows 6
window.alert(add4(3)); // shows 7
Кроме того, они не «запутаются», если у вас есть локальные переменные с одинаковыми именами:
var a = "Hello, world";
function multiply(a) {
return function(b) {
return a * b;
}
}
window.alert(multiply(6)(7)); // shows 42
var twoTimes = multiply(2);
window.alert(typeof(twoTimes));
window.alert(twoTimes(5));
Итак, после вызова sum (2)
или multiply (2)
результат не будет число или строка, а функция
. Это характеристика функциональных языков - языков, в которых функции могут передаваться как параметры и возвращаться как результаты других функций.
У вас есть функция, которая возвращает функцию:
function f(n) {
return function(x) {
return n + x;
};
}
Когда вы вызываете f (1), вы получаете обратную ссылку на функцию. Вы можете сохранить ссылку в переменной и вызвать ее:
var fx = f(1);
var result = fx(2);
Или вы можете вызвать ее напрямую:
var result = f(1)(2);
Чтобы получить функцию, которая возвращает функцию, которая возвращает функцию, которая возвращает функцию, вам просто нужно повторить процесс :
function f(n) {
return function(x) {
return function(y) {
return function(z) {
return n + x + y + z;
}
}
};
}
Если ваша функция возвращает функцию, вы также можете вызвать ее.
x = f(1)(2)
эквивалентно:
f2 = f(1)
x = f2(2)
Круглые скобки указывают на вызов функции (вы это «называете»). Если у вас есть
<anything>()
, это означает, что значение something
является вызываемым значением. Представьте себе следующую функцию:
function add(n1) {
return function add_second(n2) {
return n1+n2
}
}
Затем вы можете вызвать ее как add (1) (2)
, что будет равняться 3. Естественно, вы можете расширить эту функцию, сколько захотите.