LINUX.ORG.RU

Предварительный релиз Ruby 1.9.0


0

0

Matz, автор языка Ruby, выпустил предварительный релиз Ruby 1.9.0, следующей версии языка программирования Ruby.

Дистрибутивы: ftp://ftp.ruby-lang.org/pub/ruby/1.9

Вот подборка с описанием отличий Ruby 1.9 от предшествующего Ruby 1.8: http://eigenclass.org/hiki/Changes+in...

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

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

BSD ненужен, что определяет и ненужность Ruby

Зыж двачую эпичный тред и рубилово

ЗЗыж капча angined

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

> Пусть форматированием занимается indent, astyle или IDE, а не человек.

Дружище, даже Kate умеет делать отступ после ":\n". Вся эта чушь про форматирование в питоне - не более, чем нытьё тех, кто этот самый питон в глаза не видел.

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

>Matz человек отзывчивый, по крайней мере подумает над такой идеей.

ТАк оно выглядит практически везде. Что это за дикость -> в начале? брейнфаком попахивает.

haskell: \x -> x * x

ocaml: function x -> x * x или fun x -> x * x

smalltalk: [:x | x * x]

c#: x => x * x

....

и только отзывчивый человек Matz.....

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

>Мсье неосилил vim? И замену табуляций пробелами?

Вообще это дурацкая практика - замена табуляций пробелами. Этого делать _не надо_.

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

>ThoughtWorks это тоже пионеры-энтузиасты? Ну-ну...

Это пионерважатые.

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

c = 1; -> a, b; c { c = a + b }.call(1,2); c # => 1

>Простой, лаконичный и понятный код!

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

Сорри за форматирование

>> тут полно. http://phrogz.net/ProgrammingRuby/tut_containers.html#blocksanditerators

Пжалста:

def spam(stop):
    for x in range(stop):
        yield x**2

x = spam(10)
x.next() # 0
x.next() # 1
x.next() # 4
....

или 

x=iter([1,2,3,4])
x.next() # 1
x.next() # 2
x.next() # 3
x.next() # 4

Имхо ничем не хуже, только синтаксис другой.

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

Я хотел показать как можно переписать метод класса.

Например. У тебя есть класс A, у класса есть метод который возвращает котировки с yahoo.

Тебе нужно автоматически тестировать тот код, в котором используется A. Но что бы было быстрее и A.твой_метод никуда не лез, ты хочешь заменить его другим, специально для тестов.

Так-же ты можешь добавить новый метод, без наследования.

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

>писать надо через табы, так как исходники в этом случае меньше места занимают

Эмм... Вам несколько килобайт сэкономить важно?

>ширина табов настраивается как угодно в любом вменяемом редакторе, ширина пробелов не настраивается

Ну да. И поэтому во всех редакторах код с пробелами выглядит одинаково, а с табами - хз как. Зачем заставлять код выглядеть по разному?

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

>Вообще это дурацкая практика - замена табуляций пробелами. Этого делать _не надо_.

Аргументы?

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

Зачем вам нужно чтобы код выглядил одинаково? Кто-то любит выставлять ширину в 2 пробела, а кто-то в 4, табами это все настраивается без преобразования кода.

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

>Ну да. И поэтому во всех редакторах код с пробелами выглядит одинаково, а с табами - хз как. Зачем заставлять код выглядеть по разному?

Он выглядит хз как только у тух кто меняет табы пробелами. У тех кто не меняет он выглядит одинаково - как настроено.

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

>Аргументы?

Разные редакторы операционки люди. Один меняет на 2, второй на 4, третий на 8. Код выглядит просто страшно. Каждый своим редактором переформатирует код вечные конфликты в вершен контроле потому что смещение изменилось. Внимание вопрос - нафига? Если ставить таб _никаких_ проблем нет.

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

>> Это фигня. Инетересно было бы увилеть аналог find как в примере для класса Array

В самом простом варианте:

>> [x for x in [1,3,5,7,9] if x*x > 30]
>> [7, 9]


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

Ну учитывая что lisp сбалансированный язык который подчиняется естественным правилам теории компиляторов и неявно используется для оптимизации логических деревьев большого числа компиляторов, то наверное вы правы. Но я не настолько извращён, я рекомендую проверенную годами надстройку: C++ ;-)

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

Не, даже не find. find в python-е сделается через list сomprehension, 
а вот такой функции 

class Array 
 def how_many?
   count = 0 
   for i in 0...size 
     value = self[i]
     count = count +1 if yield(value) 
   end 
   return count 
 end 
end 

print [1,2,3,4,5,6,7].how_many? {|x| x % 2 == 0}

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

>> Так-же ты можешь добавить новый метод, без наследования.

class foo: pass
foo.test = help
spam = foo()
spam.test(help)  # выводит справку аналогично help(help)

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

>> Не, даже не find. find в python-е сделается через list сomprehension, 
а вот такой функции 

Собственно, что надо-то? Посчитать сколько елементов или показать как это сделать при помощи итереторов и классов-оберток?

конкретно по новому примеру аналог вот:

>> len([x for x in [1,2,3,4,5,6,7] if x % 2 == 0])
>> 3

Если надо, чтобы получился именно генератор, а не список, то замени квадратные скобки круглыми. Вот что получится:

>> count = 0
>> for spam in (x for x in [1,2,3,4,5,6,7] if x % 2 == 0):
>>    count += 1
>> print count
>> 3

cathode
()

Интересно что тормознее ROR или PHP?

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

> И чем это лучше явной передачи фильтрующей функции?

Хотя бы тем, что синтаксически проще и не вводит лишних сущностей без надобности.

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

>> И чем это лучше явной передачи фильтрующей функции?

> Хотя бы тем, что синтаксически проще

print [1,2,3,4,5,6,7].how_many? {|x| x % 2 == 0}

против

print how_many([1,2,3,4,5], lambda x: x % 2 == 0)

> и не вводит лишних сущностей без надобности.

И какая сущность является "лишней"? Или имеется в виду то, что в Руби how_many уже есть, и ее не нужно реализовывать?

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

>> len([x for x in [1,2,3,4,5,6,7] if x % 2 == 0]) >> 3

Тут список генерится, неоптимально.

>> count = 0 >> for spam in (x for x in [1,2,3,4,5,6,7] if x % 2 == 0): >> count += 1 >> print count

Если эта функциональность будет использоваться часто, причем с разными условиями, то приведенное тобой решение будет хуже аналогичного на руби. Придется постоянно копипастить этот текст. К тому же в пространстве имен появляется вообщем-то ненужная переменная count

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

>> Придется постоянно копипастить этот текст

нах? сдается мне питон ты знаешь на уровне книжки "питон за 24 часа" :-|

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

Представь, что у тебя вместо проверки на четность используется условие расчет которого занимает несколько строк. Что делать ?

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

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

И в функцию, конечно вывернуть это условие никак?

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

А нафига, в lambda много кода не засунешь, а отдельную функцию заводить не всегда нужно

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

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

Ну и причем тут _итераторы_, по возможностям которых Руби превосходит Питон? А то, что в Питоне дохлая лямбда, известно давно и не оспаривается. Для карринга она годится, для простых выражений - тоже, а остальное встречается редко.

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

Ну так я привел пример генератора в Ruby, нормально реализовать который в питоне можно только с помощью (анонимных) функций. А синтаксис аноноимных функций в питоне слабенький, это общеизвестно.

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

>> Если эта функциональность будет использоваться часто, причем с разными условиями, то приведенное тобой решение будет хуже аналогичного на руби. Придется постоянно копипастить этот текст. К тому же в пространстве имен появляется вообщем-то ненужная переменная count

Заверни это в функцию или класс получишь то что надо, в чем проблема то? Ну или совсем приперло, добавь эту функцию к объекту list (унаследуй от него класс) и получишь тоже самое что и твоем Array.

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

> Ну так я привел пример генератора в Ruby

Для того, что ты привел, генератор не нужен, но уж если хочется именно генератор, то Питоновский подойдет не хуже. Единственное, что ты (почти) продемонстрировал - более мощная лямбда в Руби. Ну на это я уже ответил.

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

>А Linux - пингвин, ага. В крематории до нового года скидки, не забудь.

Ты все же словарь-то возьми. Любой. Англо-русский.

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

> нормально реализовать который в питоне можно только с помощью (анонимных) функций

У каждой задачи, как правило, есть более одного решение, ага :)

так что слово "только" тут не канает.

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

>> Ну так я привел пример генератора в Ruby, нормально реализовать который в питоне можно только с помощью (анонимных) функций. А синтаксис аноноимных функций в питоне слабенький, это общеизвестно.

Ну прям-таки "только".

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

> Ну и причем тут _итераторы_, по возможностям которых Руби превосходит Питон? А то, что в Питоне дохлая лямбда, известно давно и не оспаривается. Для карринга она годится, для простых выражений - тоже, а остальное встречается редко.

Итераторы вообще не причем.
Это просто очень удобный прием показать начинающим Ruby-программистам
полезность блоков кода. Поскольку блоки кода это и есть одна из
главных черт языка (очень качественно слямженая из SmallTalk).
Всяких операции над коллекциями, вроде each, index, find, inject и
пр. в Ruby выполняются с помощью блоков кода.

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

Например, что-то вроде:

  task :doxygen { |t|
    t.include_path 'my_prj'
    t.include_samples 'my_samples'
    t.defines { |d|
      d << 'EXPORT_SPEC' => ''
      d << 'EXPORT_CLASS(C)' => 'C'
    }
  }

будет обычной программой на Ruby, использующей блоки кода.

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

ТУТСЯПыЩЩЩЩЩЩЩЩЩь! ПыЩЩЩЩЩЩЩЩЩь! ПыЩЩЩЩЩЩЩЩЩь!УПЯЧКОЧАТ!!!ОЯЕБУ!!ЖЫВТОНЕ ЧОЧО УПЯЧКА 11!1!УПЯЧКОЧАТ!!!УПЯЧКОЧАТ!!!ТЕЛОИДЛУЧИ ПОНОСА!!!!ЖЕПЬ ЕБРИЛО!!!!!Я ИДИОТ!!УБЕЙТЕ МЕНЯ КТО–НИБУДЬ!!!!!Я ИДИОТ!!УБЕЙТЕ МЕНЯ КТО–НИБУДЬ!!!!!УПЯЧКОЧАТ!!!ЖАЖА!!!ПОТС ЗОХВАЧЕН!!!!УпЯЧКАЖАЖА!!!ГЛАНДЭОЯЕБУ!!ПыЩЩЩЩЩЩЩЩЩь! ПыЩЩЩЩЩЩЩЩЩь! ПыЩЩЩЩЩЩЩЩЩь!ЖАЖА!!!ПыЩЩЩЩЩЩЩЩЩь! ПыЩЩЩЩЩЩЩЩЩь! ПыЩЩЩЩЩЩЩЩЩь!ЭЕКСТЕЛР ТЫОЙ ЯЕБАНЕЙУ КОТУ!!!УПЯЧКОЧАТ!!!

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

>> Единственное, что ты (почти) продемонстрировал - более мощная лямбда в Руби

Конкретно по этому примеру и в питоне можно лямбду написать:

lambda x ,v: x**2 > v

cathode
()
Ответ на: комментарий от Sun-ch

> Algorithmic Language Algol 67, Mathematisch Centrum, MR 92, November. 1967. A. van Wijngaarden (Editor), B.J. Mailloux, J.E.L. Peck and C.H.A. Koster.

Что-то Гугл такого не знает :) Судя по списку авторов, это драфт того, что стало потом ALGOL 68ю

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

>> Единственное, что ты (почти) продемонстрировал - более мощная лямбда в Руби

> Конкретно по этому примеру и в питоне можно лямбду написать

Поэтому я и написал "почти"

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