Comments 13
Не этим ли навеяна «тёмная сторона»
blog.extracheese.org/2010/02/python-vs-ruby-a-battle-to-the-death.html
blog.extracheese.org/2010/02/python-vs-ruby-a-battle-to-the-death.html
0
“I found lambda!” — Matz
Спасибо вам, уважаемый — держите плюс в карму:)
Жаль, что не затронута тема нового в Ruby 1.9.1 синтексиса ламбды…
Было:
c = lambda {|a, b| [b, a] }
c.call(1, 2)
Стало:
c = ->(a, b) { [b, a] }
c.(1,2)
Спасибо вам, уважаемый — держите плюс в карму:)
Жаль, что не затронута тема нового в Ruby 1.9.1 синтексиса ламбды…
Было:
c = lambda {|a, b| [b, a] }
c.call(1, 2)
Стало:
c = ->(a, b) { [b, a] }
c.(1,2)
0
кстати, yugui.jp/articles/846 очередная мозговыносная статья для рубиста :)) Чем больше познаю язык, тем он красивее :))))
0
UFO just landed and posted this here
Несколько странно выглядит сравнение методов и proc-объектов. Дело в том, что методы в руби не являются обектами. Их конечно можно преобразовать к proc — но это уже другая история.
Статья несомненно интересная, большое спасибо.
P.S. proc-объекты в ruby1.9.X стали умнее, взять хотя бы те же умолчательные значения для передаваемых параметров :)
Статья несомненно интересная, большое спасибо.
P.S. proc-объекты в ruby1.9.X стали умнее, взять хотя бы те же умолчательные значения для передаваемых параметров :)
0
Дело в том, что методы в руби не являются обектами. Их конечно можно преобразовать к proc — но это уже другая история.
Должно быть вы путаете с блоками. Методы вполне себе могут быть объектами класса Method, а как раз блоки только преобразовывать в proc.
0
Я говорил, о методах, но как выходит ошибался. Действительно есть класс Method, но метод new у него отсутствует.
ruby-1.9.2-p0 > Method.new NoMethodError: undefined method `new' for Method:Class from (irb):15 from /home/saks/.rvm/rubies/ruby-1.9.2-p0/bin/irb:17:in `<main>' </ore> Что немного смущает...
0
>> class MyClass
>> def initialize(value)
>> @x = value
>> end
>> def my_method
>> @x
>> end
>> end
=> nil
>> obj = MyClass.new(1)
=> #<MyClass:0x00000001cdb210 @x=1>
>> m = obj.method :my_method
=> #<Method: MyClass#my_method>
>> m.class
=> Method
>> m.call
=> 1
>>
Method.new и не нужен.
0
При таком объявлении — не нужен, но было бы логично и ожидаемо, если бы методы можно было создавать
при помощи метода new, а потом например привязывать к объектам, классам (как методы класса) или вызывать в контексте какого-либо объекта, как например в javascript с помощью call и apply это делается.
А так получается, что есть ключевое слово def (вроде это именно ключевое слово, не оператор), и есть методы define_method / define_singleton_method… Ну можно через eval ещё создать динамически метод, но это не вариант.
И получается, что методы то объекты, но вот создаются — не как все, а как-то по особенному, что не соответствует принципу наименьшего удивления. Хотя ruby пытаются делать как можно более логичным.
при помощи метода new, а потом например привязывать к объектам, классам (как методы класса) или вызывать в контексте какого-либо объекта, как например в javascript с помощью call и apply это делается.
А так получается, что есть ключевое слово def (вроде это именно ключевое слово, не оператор), и есть методы define_method / define_singleton_method… Ну можно через eval ещё создать динамически метод, но это не вариант.
И получается, что методы то объекты, но вот создаются — не как все, а как-то по особенному, что не соответствует принципу наименьшего удивления. Хотя ruby пытаются делать как можно более логичным.
0
блоки и Процедуры и лямбды — это разные вещи. Блок не является объектом, это просто код заключенный в do...end или {}, а процедуры и лямды являются объектами, которые состоят из принимаемых при создании нового экземпляра класса Proc блоков.
0
Sign up to leave a comment.
Темная сторона Ruby, Proc и lambda