Что делать со строкой # [], когда нужно вызвать имя метода для вызова? - PullRequest
0 голосов
/ 23 декабря 2018

String#[] - очень полезный метод, но иногда его невозможно использовать, в частности, для кода, переданного в instance_eval.Например, используя отличный инструмент rb (на https://github.com/thisredone/rb),, если я хочу передать вывод ls -l, чтобы получить только разрешения (по общему признанию, скорее всего, бесполезные, но иллюстрирующие мою точку зрения), я могу сделать этонапример:

$ ls -l | rb -l 'split.first'
-rw-r--r--

... но если я хочу сделать то же самое с [], это не сработает:

$ ls -l | rb -l '[0..10]'
0..10
# ...

Как я могу использовать []оператор (метод) в подобных случаях?

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Метод [] имеет псевдоним, который не требует обходных путей: slice

0 голосов
/ 23 декабря 2018

В этом случае нужно «обмануть» его, чтобы он поступил правильно, используя вызов метода, который обычно был бы избыточным.Вот несколько способов сделать это:

ls -l | rb -l 'self[0..10]'
ls -l | rb -l 'to_s[0..10]'
ls -l | rb -l 'send :[], 0..10'
ls -l | rb -l 'public_send :[], 0..10'

Вероятно, самый простой и естественный способ сделать это - использовать self, показанный в первом примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...