Когда я работал над этим примером в своей голове, я получил вывод 4 8 3
. Когда я запускаю функцию, но получаю вывод 4 8 6
, я понимаю, как получить 4
и 8
, но я не могу понять, как y = 6
. Не должно y = 3
? a1
, результаты которого приведены в y +=1
, поэтому y = 1
затем a2
работает, что приводит к y+=2
так y = 3
.Смущенный о выходе функции C#
void Main() {
int y = 0;
Func<int,bool> even = (n) => { return n%2 == 0; };
Func<int,int> dub = (n) => { y += 2; return n + n; };
Func<int,int> succ = (n) => { y += 1; return n + 1; };
Func<bool, int, int, int> if1 = (c, t, f) => c? t: f;
y = 0;
var a1 = if1(even(3), dub(3), succ(3));
var a2 = if1(even(4), dub(4), succ(4));
Console.WriteLine("{0} {1} {2}", a1, a2, y);
}
Вы дважды вызывали 'dub' и' succ', поэтому результат 6 –
Dub +2 и Succ +1 и оба запускаются дважды? 2 + 1 + 2 + 1 = 6 –
@JonathanWood n% 1 == 0 для всех целых чисел. Он ничего не говорит о том, является ли число четным. Указанная функция правильна для определения того, является ли значение четным. – zstewart