Почему мой Perl не отображается, возвращают что-нибудь?

Я разработчик команды Xamarin в Realm, поэтому я могу рассказать вам немного больше о том, как работает продукт Xamarin.

В Realm есть ядро ​​C ++, которое является общим для всех продуктов. Вот почему мы выпускаем для каждой платформы , а не только для языка - нам нужно включить собственное ядро. Несмотря на то, что мы поддерживаем сборку PCL вашего кода, у нас нет библиотеки PCL как таковой - во время сборки ваш код PCL будет ссылаться на соответствующую библиотеку IOS или Android.

Это означает, что, например, продукт C # обеспечивает LINQ, для запросов и использования объектов C # в качестве средства определения модели данных. Во время сборки генератор кода Fody запускается, чтобы добавить средства определения свойств и геттеры, чтобы ваши объекты C # напрямую взаимодействовали с основными данными на C ++. В отличие от обычных продуктов ORM, нет копий данных из базы данных в буферы, а затем снова в ваши объекты.

Данные в области данных отображаются в памяти, поэтому они переходят непосредственно из вашего кода в хранилище. Мы генерируем методы доступа, которые заменяют автотестеры getters и seters.

Мы используем термин zero-copy , чтобы описать это. Напротив, большинство других систем будут иметь объекты C #, которые имеют поля, поддерживающие их свойства. Эти объекты часто заполняются копированием из буфера SQLite, который был прочитан из хранилища disk . Это два уровня копирования.

5
задан tchrist 3 August 2013 в 17:44
поделиться

6 ответов

Попробуйте это:

@filtered = map {s/ //g; $_} @outdata;

Проблемой является s оператор в жемчуге, изменяет $ _, но на самом деле возвращает количество изменений, которые это внесло. Так, дополнительный $ _ в конце заставляет жемчуг возвращать измененную строку для каждого элемента @outdata.

10
ответ дан 18 December 2019 в 05:13
поделиться

Обратите внимание, что карта собирается изменить Ваш исходный массив также. Таким образом, Вы могли или сделать:

map {s/ //g} @outdata;

и пропустите @filtered переменную в целом, или если необходимо сохранить оригиналы,

@filtered = @outdata;
map {s/ //g} @filtered;

Хотя в этом случае это могло бы быть более читаемо для использования foreach:

s/ //g foreach @filtered;
15
ответ дан 18 December 2019 в 05:13
поделиться

Ответ Greg имеет проблему, что это изменит исходный массив, когда $ _ передаются искаженные. Вам нужно:

@filtered = map { (my $new = $_) =~ s/ //g; $new} @outdata;
9
ответ дан 18 December 2019 в 05:13
поделиться

Для следования точке Tithonium это также добьется цели:

@filtered = map {local $_=$_; s/ //g; $_} @outdata;

"Локальное" гарантирует, что Вы работаете над копией, не оригиналом.

6
ответ дан 18 December 2019 в 05:13
поделиться
use Algorithm::Loops "Filter";
@filtered = Filter { s/ //g } @outdata;
4
ответ дан 18 December 2019 в 05:13
поделиться

Как контрапункт к ответу Greg, Вы могли неправильно использовать grep:

@filtered = grep {s/ //g; 1} @outdata;

Не делайте этого.

3
ответ дан 18 December 2019 в 05:13
поделиться
Другие вопросы по тегам:

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