LINUX.ORG.RU
ФорумTalks

ASCII, КАРЛ!

 ,


0

3

Просматривал тут исходники ЛОРа и наткнулся на следующий фрагмент:

case Failure(e: FileNotFoundException) ⇒
    logger.warn(s"Userpic not found for ${user.getNick}: ${e.getMessage}")
    None
case Failure(e) ⇒
    logger.warn(s"Bad userpic for ${user.getNick}", e)
    None
case Success(u) ⇒
    Some(u)

Мое внимание привлек данный символ: ⇒

Сначала я подумал что это проделки веб-морды гитхаба, но открыв файл в режиме «raw», я увидел тот же самый символ. WTF?

★★★★★

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

Как надо правильно это записать по твоему мнению?

Во первых без всяких нестандартных символов.

Во вторых по нормальному: как в Си например, как в перле, как в питоне.

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

потому что ты не понимаешь, что там написано

думаю, так будет понятней, если это вариант на Крестах:

char *names[7] = { "Eddy_Em", "tailgunner", "FRCTLL", "царь", "anonimous", "anonymous", "Siado" };
int len = 7;
 
for (int i = 0; i < len; ++i)
{
    cout << names[i] << endl;
}

то на скале можно записать вот так:

val names = Array("Eddy_Em", "tailgunner", "FRCTLL", "царь", "anonimous", "anonymous", "Siado")

val nats = from(0)

for (i <- nats.take(names.length)) {
  println(names(i))
}

Заметь, что nats - это бесконечный список всех чисел, начинающихся с нуля.

А использованный nats.take - это по сути генератор, разворачивающий конечное подмножество

т.е. можно например, распечатать только чётные имена вот так

val nats = from(0)
val even = nats filter (_ % 2 == 0)

val num = ((names.length:Double)/2).ceil.toInt
for (i <- even.take(num)) {
  println(names(i))
}

конечно, постоянно писать from(0) западло, поэтому есть вот такой шорткат:

for (i <- 0 until names.length) {
  println(names(i))
}

заметь, что until - это не какой-то магический кейворд для компилятора, встроенный в язык, а просто метод класса RichInt, записанный как оператор, чтобы было легче читать. Исходники

т.е. это можно было бы переписать в более «привычном» dot-синтаксисе так:

for (i <- 0.until(names.length)) {
  println(names(i))
}

если точнее, метод until возвращает Range, который есть специализация бесконечных списков для хранения диапазона интов

ещё проще можно записать вот так:

for (i <- names.indices) println(names(i))

(на самом деле здесь есть немножко магии в операции <- которая таки к сожалению встроена в язык, пример вопроса на SO с цитатой из стандарта)

отличная штука!

твое предложение использовать сишные циклы после всего этого пробивает на ха-ха

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

твое предложение использовать сишные циклы после всего этого пробивает на ха-ха

Вообще-то предлагались на выбор циклы 3-х языков.

tailgunner ★★★★★ ()

Это чтобы было сложнее набирать. И чтобы контекстный поиск нифига не работал.

В коде должна быть только первая половина ASCII, исключая строковые литералы.

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

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

а в питоне - оно и так в каком-то смысле как в питоне. Но питон емнип ни в каком виде не умеет использовать for по нескольким переменным, и нужно юзать такие подпорки:

import itertools

t1 = [a list of integers, strings and lists]
t2 = [another list of integers, strings and lists]

for i, j in itertools.product(range(x), range(y)):
    бла-бла-бла

имхо это неплохо, что itertools это внешняя подпорка, а не хардкод в конпеляторе. Плохо что сам питон имеет нерасширяемый синтаксис, и нельзя вот этот «itertools.product(» вызванный в мерзком синтаксисе, выбросить, чтобы конпелятор сам его подставил (вывел из контекста). И даже в какой-нибудь няшный оператор не превратишь. Так что низачот.

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

int a = 0;
for (int i1 = 0; i1 < 10; i1++) {
    a = // generate random number
 
    int b = 0;
    for (int i2 = 0; i2 < 10; i2++) {
        b = // generate random number
        System.out.println("(" + a + ", " + b + ")");
    }
}

понятно что вложенные циклы это фу

meanwhile in russia scala, на онове тех же бесконечных стримов:

def randomGen: Stream[Int] = (Math.random * 200).toInt - 100 :: randomGen
val random = randomGen
 
for (a <- random.take(10); b <- random.take(10)) {
  println("(" + a + ", " + b + ")")
}

так то!

stevejobs ★★★☆☆ ()
Последнее исправление: stevejobs (всего исправлений: 1)

КАРЛ!

Чё вы все такие слоупоки?

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

питон емнип ни в каком виде не умеет использовать for по нескольким переменным

А конкретнее?

Плохо что сам питон имеет нерасширяемый синтаксис

Scala тоже имеет (имела) нерасширяемый синтаксис, просто умееет вызывать методы там, где обычно стоят ключевые слова. Оно круто, конечно, но запутывает.

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

А конкретнее?

Там выше пример, как в питоне делается for по нескольким переменным. Никак не делается. Что можно еще конкретнее?

имеет (имела) нерасширяемый синтаксис

да, к сожалению.

у скалы есть implicit conversions и implicit parameters, и можно оверлоадить операции типа +, ну и переписывать dot-call в виде оператора. Ну и конечно на подходе http://scalameta.org (http://scalamacros.org). Короче, всё будет отлично.

нерасширяемый синтаксис

очевидно же - нужно выбирать лисп

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

Там выше пример, как в питоне делается for по нескольким переменным. Никак не делается. Что можно еще конкретнее?

Там выше были какие-то простынки кода пополам с псевдокодом.

у скалы есть implicit conversions и implicit parameters, и можно оверлоадить операции типа +, ну и переписывать dot-call в виде оператора

Ну да. Си++ XXI века, спроектированный хорошо образованным человеком.

tailgunner ★★★★★ ()

Хипстота потому что, => распарсить нормально не могут.

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

Ещё чуть-чуть и у них таки получится переизобрести APL! ;)

PS: Go тоже грешит уникодными символами в сырцах, но там они чисто для оптики.

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