LINUX.ORG.RU

print "ruby rules! what about python?" * 15

Selecter ★★★★
()

def dotimes(n, func):
    for x in xrange(n):
         func()

def puts(str):
    print str

dotimes(5, lambda: puts("Yes Ruby is better than Python."))

С print lambda не работает...

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

Кстати на этом примере можно увидет недальновидность Гвидо в отношение к lambda, еслиб можно было писать много строчные лямбды это решение ничуть бы не уступало рубивскому. А так писать отдельно фукнции ужос.

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

write=sys.stdout.write
def times(n):
  def repeat(f,*args,**kwargs):
    for i in range(n):
      f(*args,**kwargs)
  return repeat

times(15)(write,'Are you sure?\n')

А ещё, вроде, обещали print функцией сделать.

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

ТОже не то, а если не только функцию а произвольный болк кода надо вызвать? Функцию отдельно создавать только...

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

в этом плане Ruby более ОО - язык:) Правда тормоз, но по сравнение с питоном не так уж и плох.

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

>Функцию отдельно создавать только...

Представляешь, как "функциональщики" мучаются - у них там вообще _всё_ - функция. УЖАС:-}

Если серьёзно - а в чём проблема? Трудно придумывать имена?

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

> Представляешь, как "функциональщики" мучаются - у них там вообще _всё_ - функция. УЖАС:-}

Зато, у них lambda нормальная.

> а в чём проблема? Трудно придумывать имена?

В том числе. А прежде всего --- распыляется код. С лямбдой у тебя в одном месте нормально описано что и как делается, а без нее --- часть действия (функция) описана где-то в другом месте (в случае питона часто можно поближе перетащить).

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от ero-sennin

1) Нафига цикл, когда тебе нужно просто выполнить н-ое число раз какое-то действие?

2) Ты создаёшь переменную i, итератор, когда она абсолютно НЕ нужна.
3) Такой код намного хуже читаеться.

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

>Представляешь, как "функциональщики" мучаются - у них там вообще _всё_ - функция. УЖАС:-}

они не мучаються -- у них лямбда нормальная.

> Если серьёзно - а в чём проблема? Трудно придумывать имена?

В том что это вообщем-то совсем не логично, я хочу передать некий код в нутри данной функции высокого уровня в данном контексте, и придумывать какие-то другие функции мне совсем не надо.

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

>1) Нафига цикл, когда тебе нужно просто выполнить н-ое число раз какое-то действие? >2) Ты создаёшь переменную i, итератор, когда она абсолютно НЕ нужна.

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

>3) Такой код намного хуже читаеться.

А вот +1 именно абстракция здесь главное и весьма существенное отличие. в котором руби выигрывает.

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

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

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

>Трудно придумывать имена >В том числе.

Называй все одноразовые ф-ии "__" - и эта проблема исчезнет. Пока их в одном выражениии меньше 2х нужно - в противном случае скорее всего стоит переходить на "настоящие" языки:-)

>лямбдой у тебя в одном месте нормально описано что и как делается

Мне, почему-то, больше нравится хаскелевский стиль с "where" - когда всякие мелкие сущности определены позже, и не лезут в глаза при чтении. Конечно простые вещи типа (a . b) уносить не стоит, но в питоне полезные вещи настолько понятно не пишутся - тут сразу появится много неочевидно-стоящих "()", которые сразу понадобится считать, а тут уже лучше имя придумать.

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

Имхо where хорошо в чисто функциональном языке, где порядок вычисления значений неважен. В императивщине where это лишний повод запутаться.

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

>>1) Нафига цикл, когда тебе нужно просто выполнить н-ое число раз какое-то действие? >2) Ты создаёшь переменную i, итератор, когда она абсолютно НЕ нужна.

> А ты думаешь в руби это делаеться по другому, просто абстрактнее.

К слову, как раз таки значение счетчика переменной в times было бы неплохо.

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

Точнее в ФЯ с ленивой семантикой вычислений.

import System.Environment

main = do args <- getArgs
          case args of
            [] -> a
            _  -> b
    where a = putStrLn "No args"
          b = putStrLn "Some args"

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