LINUX.ORG.RU

Вышел Ruby 2.0.0

 , повод


2

3

Это свершилось! На двадцатилетие Ruby – вышел релиз … Очень символично. :)

Из новшеств:

  • Особенности в синтаксисе:
    • Keyword arguments
    • Module#prepend
    • %i — новый литерал для создание символьных массивов;
    • __dir__ — возвратит имя директории, в которой исполняется файл;
    • Кодировка UTF-8 по-умолчанию;
  • Встроенные библиотеки:
    • Новый движок регулярных выражений — Onigmo
    • Объектам Enumerator добавлен метод #size;
    • Enumerator#lazy
    • #to_h — новое соглашение о преобразовании в хэш;
  • Средства отладки:
  • Поддержка экспорта/импорта байткода;
  • Чистка кода, отсуствие устаревших библиотек;

Документация:

Наслаждайтесь программированием вместе с Ruby!

>>> Подробности

★★★★★

Проверено: tazhate ()
Последнее исправление: renya (всего исправлений: 6)
Ответ на: комментарий от special-k

Вот ваш «keyword arguments»

def my_function(**kwargs):

А ты еще и по Питону спец?

def foo(x, bar = 1, baz = 2, **kwargs):
   print x, bar, baz, kwargs

аргументы в руби сделаны однозначно лучше.

И чем же?

tailgunner ★★★★★
()
Ответ на: комментарий от special-k

print x, bar, baz, kwargs

да-да так раньше было нельзя, на это уходило чуть больше строчек (см. выше), теперь можно.

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

Что значит эта конструкция и что ты хочешь получить «в Питоне»?

>>> def foo (x, bar = 1, baz = 2, **kwargs): print x, bar, baz, kwargs
...
>>> foo("x", **{"bar": 1, "baz": 2, "tt": 3})
>>> x 1 2 {'tt': 3}
tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner
def a b, c, d: 1, e: 2, **opts
  p [b,c,d,e,opts]
end
v = [1, 2, {d: 3, e: 4, g: 5}]
a *v #:p
a 1, 2, {d: 3, e: 4, g: 5} #а хэш передается безо всяких звездочек

кроме того, можно сделать так

class My
  def to_hash
    {d: 3, e: 4, g: 5}
  end
end
a 1, 2, My.new
Но, могу сказать, что я не очень этим доволен, обязательно нужна конвертация в хэш, но почему это обязательно должен быть хэш.. утиная типизация же, а тут нет..(

special-k ★★★★
()
Ответ на: комментарий от tailgunner

Тема «лучшести» раскрыта.

Да больше корявых конструкций, мало еще. Звездочки при создании, звездочки при передаче параметров, надо еще звездочки при вызове, и еще где-нибудь. Не говоря о том, что свернуть хэш в параметры != передать хэш в качестве параметров.

Вообще, вот тебе аргументы руби.

    def foo(
      a, b, c,     # mandatory arguments
      opt = 1,     # optional arguments
      *rest,       # rest argument
      x, y, z,     # post mandatory arguments
      k1: 1, k2:2, # keyword arguments
      **kh,        # keyword rest argument
      &blk         # block argument
    )

special-k ★★★★
()
Последнее исправление: special-k (всего исправлений: 1)
Ответ на: комментарий от special-k

имхо def func(value, *arguments, **keywords) гораздо понятнее чем та каша на раби)

P.S. говоря о корявых конструкциях:

/(?<x>\d+)x(?<y>\d+)/ =~ "25x30"
print (x,y)
понятнота) Хотя языки похожи по возможностям, мне больше нравится питон за простоту и ясность кода.

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

мне больше нравится питон за простоту и ясность кода.

Нет в питоне никакой ясности кода. Проекты на питоне развиваются медленнее чем проекты на руби, и одна из причин, очевидно, менее понятный синтаксис. Элементарные вещи на питоне делаются с большим трудом, и выглядят при этом пугающе, запутано. Тот же пример с последовательной обработкой массива. Один из явных недостатков - отсутствие блоков. Очень большая часть всего в руби работает именно через блоки:

#rspec
before :all do
  #...
end
it 'should' do
  #...
end

#rake
task :name do
  #...
end

#итераторы
[1,2,3].map{|el| el*el }
[1,2,3].select{|el| el>1 }

#умолчания для hash
t = Hash.new{|h,k| h[k] = [] }
t[:a] #[]

#фиберы
Fiber.new{ 
 #...
}
#тыщи их...
И это работает во многом благодаря механизму передачи параметров. То, чего нет, например, в js, когда часто приходится писать что-то вроде
a(1,2,3,function(){
  //...
},4,5)
Так что нет, не каша, а наоборот, все неплохо продумано и содержит минимум шума. А питон - это недоруби, недоjs, (недохаскель). Я не понимаю в чем сильные стороны этого языка. Пример с регуляркой хорош, но это не изменит ситуацию в целом)

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

имхо def func(value, *arguments, **keywords) гораздо понятнее чем та каша на раби)

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

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

Зачем тормозной и убогий руби с рельсами если есть няшная Scala и Play Framework?

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