возврат посреди блока использования

Мой любимый метод, так как Swift 2.0 is flatten

var a:[CGFloat] = [1, 2, 3]
var b:[CGFloat] = [4, 5, 6]

let c = [a, b].flatten()

Это вернет FlattenBidirectionalCollection, поэтому, если вы просто хотите CollectionType, этого будет достаточно, и вы будете имеют ленивую оценку бесплатно. Если вам нужен именно массив, вы можете это сделать:

let c = Array([a, b].flatten())

181
задан tafa 19 March 2009 в 15:53
поделиться

5 ответов

Поскольку несколько других указали в целом, что это не проблема.

единственный случай это вызовет Вас, проблемы - то, если Вы возвращаетесь посреди оператора использования и дополнительно возвращаетесь в использовании переменной. Но с другой стороны, это также вызвало бы, Вы выходите, даже если Вы не возвратили и просто сохранили ссылку на переменную.

using ( var x = new Something() ) { 
  // not a good idea
  return x;
}

Так же, как плохо

Something y;
using ( var x = new Something() ) {
  y = x;
}
184
ответ дан JaredPar 4 November 2019 в 15:43
поделиться

Это прекрасно абсолютно - без проблем вообще. Почему Вы полагаете, что это неправильно?

оператор использования А является просто синтаксическим сахаром для блока попытки/наконец, и поскольку Grzenio заявляет, что хорошо возвращаться из блока попытки также.

выражение возврата будет оценено, тогда наконец, блок будет выполняться, тогда метод возвратится.

91
ответ дан Jon Skeet 4 November 2019 в 15:43
поделиться

Это прекрасно подходит.

Вы, по-видимому, думаете, что

using (IDisposable disposable = GetSomeDisposable())
{
    //.....
    //......
    return Stg();
}

вслепую переводится в:

IDisposable disposable = GetSomeDisposable()
//.....
//......
return Stg();
disposable.Dispose();

, Который, по общему признанию, был бы проблемой и сделает using оператор довольно бессмысленный---, который является, почему это не , что это делает.

компилятор удостоверяется, что объект расположен, прежде чем управление оставляет блок - независимо от того, как это оставляет блок.

131
ответ дан James Curran 4 November 2019 в 15:43
поделиться

Это будет работать превосходное, так же, как возвращающийся посреди try{}finally{}

25
ответ дан Grzenio 4 November 2019 в 15:43
поделиться

Это полностью приемлемо. использование оператор гарантирует, что объект IDisposable будет расположен несмотря ни на что.

От MSDN:

оператор использования гарантирует, чтобы Расположили, назван, даже если исключение происходит, в то время как Вы - вызывающие методы для объекта. Можно достигнуть того же результата путем помещения объекта в блоке попытки, и затем вызов Располагают в наконец блок; на самом деле это - то, как оператор использования переводится компилятором.

17
ответ дан mbillard 4 November 2019 в 15:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: