LINUX.ORG.RU

Вопрос рубистам

 , ,


0

2

Собственно вопрос: почему в Ruby нельзя нормально (естественно) передать метод в другой метод? Вернее, почему не добавили ещё сахарку какого-нибудь для обхода этого момента?

В Python:

>>> def foo(a):
...  print a
... 
>>> def bar(): pass
... 
>>> foo(bar)
<function bar at 0xb7636764>
>>> 
В Ruby:
irb(main):001:0> def foo a
irb(main):002:1> print a
irb(main):003:1> end
=> nil
irb(main):004:0> def bar
irb(main):005:1> end
=> nil
irb(main):006:0> foo bar
=> nil
То есть, поскольку в Ruby для вызова метода не нужны круглые скобки, то bar вызывается при передаче в качестве аргумента, и foo работает уже с nil.

★★★★★
Ответ на: комментарий от Deleted

... это очень простой, удобный и очевидный ... костыль. Я хочу передать объект первого класса в другой объект, но для этого его надо сначала завернуть, потом развернуть. Я же не подкалываю, мне интересно, это реально никого не цепляет?

Virtuos86 ★★★★★
() автор топика
Ответ на: комментарий от anonymous
irb(main):037:0> yoba method(:lol)
{
lol
}
=> nil
irb(main):038:0> 

не оно, хотя lol, да

Virtuos86 ★★★★★
() автор топика
Ответ на: комментарий от Virtuos86

>Я хочу передать объект первого класса
Не хочешь :} Функции и руби, у них такая вот особая любовь.

Deleted
()
Ответ на: комментарий от Deleted

Функции и руби, у них такая вот особая любовь.

в стиле анимэ?)

Virtuos86 ★★★★★
() автор топика

Передача метода - передача функции - переход с Ruby на Haskell?

Веб-разработку держит даже на мой взгляд лушче чем Ruby

Deleted
()
Ответ на: комментарий от Deleted

Не ахти у хацкеля инфраструктура для веба имхо. Ну потыкал я Yesod например, значительно неудобнее рельсов.

anonymous
()
Ответ на: комментарий от buddhist

Забросил автор свой проект, а жаль, но ничего всегда есть выбор, и выбор других фреймворков на Haskell богатый

Лучший на мой взгляд на сегодня http://happstack.com/

Deleted
()

меня еще раздражает что в руби лямбды скобками не вызвать. Пишешь в схема стиле и везде .call
а еще различие def и define_method
упортый язык, что автор имел ввиду под таким дизайном - непонятно

bga_ ★★★★
()
Ответ на: комментарий от Virtuos86

Я же не подкалываю, мне интересно, это реально никого не цепляет?

это реально никому не нужно.

korvin_ ★★★★★
()
Ответ на: комментарий от bga_

меня еще раздражает что в руби лямбды скобками не вызвать. Пишешь в схема стиле и везде .call а еще различие def и define_method упортый язык, что автор имел ввиду под таким дизайном - непонятно

Ruby

Пишешь в схема стиле

меня еще раздражает

удивительно.

korvin_ ★★★★★
()
Ответ на: комментарий от anonymous

Да тема не об этом. Но, как я понял, на эту особенность рубисты смотрят сквозь пальцы. ОК, ладно.

Virtuos86 ★★★★★
() автор топика
Ответ на: комментарий от Virtuos86

да просто это не нужно. Я сравнительно давно пользую руби и ни разу не было нужно именно передать функцию в качестве параметра. Для коллбэков yeild и block_given? хватает за глаза.

anonymous
()

Спроси еще почему в Python нету полноценных лямбда-функций. И почему PHP страшный. И почему java многословная.

Просто так получилось и с этим придется жить.

anonymous
()
Ответ на: комментарий от anonymous

Хорошо подытожил. Вопрос снят.

Virtuos86 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.