Существует ли версия монады 'andand' для Objective-C? - PullRequest
5 голосов
/ 02 января 2012

Я недавно начал использовать Ick 'andand' для Ruby, поэтому я могу проходить через вложенные коллекции проще, чем раньше.

Существует ли где-нибудь реализованная версия этой идиомы для Objective-C?

и на рубиновых

1 Ответ

7 голосов
/ 02 января 2012

Я не программист на Ruby, поэтому я могу упустить что-то неуловимое, но кажется, что andand делает это так, что вы можете безопасно цеплять вызовы методов, даже когда один вызов метода может вернуть nil. Это встроено в Objective-C, потому что вызов методов для (фактически правильно называемых отправкой сообщений) nil является безопасным и совершенно приемлемым. Сообщения, равные nil, всегда возвращают nil и, по сути, не являются опциями. В Objective-C это нормально:

id foo = [someObject objectByDoingSomething]; // foo might be nil

id bar = [foo objectByDoingSomethingElse];

// If foo is nil, calling objectByDoingSomethingElse is essentially
// a no-op and returns nil, so bar will be nil
NSLog(@"foo: %@ bar: %@", foo, bar);

Следовательно, это тоже хорошо, даже если objectByDoingSomething может вернуть nil:

id foo = [[someObject objectByDoingSomething] objectByDoingSomethingElse];

С Язык программирования Objective-C : «В Objective-C допустимо отправлять сообщение на ноль - оно просто не действует во время выполнения». Этот документ содержит более подробную информацию о точном поведении вызывающих методов для nil в Objective-C.

...