Комментарии 17
Не жадничайте, пишите чаще про такие штуки (-:
+7
Syntax sugar, конечно, красивый, но мне определенно кажется, что его использование в реальной жизни почти никогда ничем объективным не обосновано, а проблем это создает массу — 99% Ruby-программистов не поймут, как это работает, да и не могу я от них требовать, чтобы они такое понимали. В целом такие трюки скорее сводят всю стройную концепцию языка к чему-то perl-подобному а ля there's more than one way to do it.
0
Я надеюсь вы это про последний пример )
+2
Я про всё вместе, к сожалению. Если посмотреть исторически — то этот самый «unary &» рождался долго и в муках — сначала в Ruby Extensions, затем в RoR, потом его таки наконец сделали нативным в Ruby 1.9 и только относительно недавно он попал (в виде бэкпорта!) в 1.8.7.
А кроме всего прочего, посмотрите сюда — Вы об этом «забыли» упомянуть в статье или не считаете это важным?
А кроме всего прочего, посмотрите сюда — Вы об этом «забыли» упомянуть в статье или не считаете это важным?
-3
Насчет syntax sugar и скорости выполнения.
DSL и удобство чтения кода, а также приоритет быстроты написания кода перед его выполнением одни из основных принципов Ruby. Лично мне поэтому и нравится писать на Ruby.
Конечно ваше право их отвергать.
DSL и удобство чтения кода, а также приоритет быстроты написания кода перед его выполнением одни из основных принципов Ruby. Лично мне поэтому и нравится писать на Ruby.
Конечно ваше право их отвергать.
+1
> А кроме всего прочего, посмотрите сюда — Вы об этом «забыли» упомянуть в статье или не считаете это важным?
Ради интереса прогнал этот же тест на ruby 1.9.2, со стандартной реализацией Symbol#to_proc. Теперь могу сказать, что такая запись не только короче и приятнее взгляду, но и работает быстрее
pastie.org/1453436
Ради интереса прогнал этот же тест на ruby 1.9.2, со стандартной реализацией Symbol#to_proc. Теперь могу сказать, что такая запись не только короче и приятнее взгляду, но и работает быстрее
pastie.org/1453436
0
НЛО прилетело и опубликовало эту надпись здесь
Symbol#to_proc появился в Ruby почти десять лет назад в версии1.1.
Амперсанд для последнего аргумента еще раньше.
Хорошая ссылка, надо накидать таких «по теме» в статью.
Амперсанд для последнего аргумента еще раньше.
Хорошая ссылка, надо накидать таких «по теме» в статью.
-2
Оп-па! Был дезинформирован, беру свои слова обратно.
Сейчас проверил в Ruby 1.8.6 метода Symbol#to_proc нет.
Сейчас проверил в Ruby 1.8.6 метода Symbol#to_proc нет.
0
Вот за это я и люблю Ruby. Пишите про такие штуки — это очень интересно.
+1
> Расскажу как в Ruby работает такая элегантная конструкция:
> User.all.map &:name
Точно так же как в лиспах уже несколько десятков лет (mapcar #'name users). Правда, в CL с CLOS эта штука проста и логична, а в Ruby поведение слегка туманно.
Ruby — это немного обрезанный Лисп с человеческим лицом. Поздравляю, вы все — лисперы :)
> User.all.map &:name
Точно так же как в лиспах уже несколько десятков лет (mapcar #'name users). Правда, в CL с CLOS эта штука проста и логична, а в Ruby поведение слегка туманно.
Ruby — это немного обрезанный Лисп с человеческим лицом. Поздравляю, вы все — лисперы :)
+2
На самом деле магия еще интереснее — здесь мы не ограничены передачей методов без параметров. При помощи &:symol можно передать метод принимающий любое количество аргументов.
Пусть у нас будет вот такой метод в массиве:
И вот такой метод в нашем юзере:
Тогда вот это
можно написать вот так:
Пусть у нас будет вот такой метод в массиве:
class Array
def map_with_arguments (*args)
a = []
self.each do |e|
a << yield(e, *args)
end
a
end
end
И вот такой метод в нашем юзере:
class User
def initialize (name); @name = name; end
def greeting (pre, suf)
"#{pre}#{@name}#{suf}"
end
end
Тогда вот это
a.map_with_arguments("Dear Mr. ", "!") {|el, pre, suf| el.greeting pre, suf}
можно написать вот так:
a.map_with_arguments("Dear Mr. ", "!", &:greeting)
+1
Вот еще статья на эту тему: rubydev.ru/2011/01/ruby_enumerable_2_unary_ampersand/
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Унарный амперсанд