- 1
- 2
- 3
- 4
- 5
- 6
private static class NullReader extends Reader {
public int read(char[] cbuf, int off, int len) {
return 0;
}
public void close() {}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+74
private static class NullReader extends Reader {
public int read(char[] cbuf, int off, int len) {
return 0;
}
public void close() {}
}
Однажды понадобилось работать с модулем, который что-то читает с помощью StreamTokenizer, но вместо реального файла подсовывать ему что-то своё, генерируемое на ходу, и при этом быть в курсе, какое место он сейчас читает. Решил пронаследоваться от StreamTokenizer и переопределить ему nextToken(). Оказалось, что у StreamTokenizer нет пустого конструктора, надо обязательно вызвать super и передать туда какой-нибудь Reader. Попробовал передавать null - оказалось, что в его конструкторе стоит проверка, которая сразу кидает NullPointerException. Блин, зачем ему Reader, если он к этому Reader никогда не обратится, ведь я nextToken переопределил! Пришлось сделать свой Reader-заглушку. Но чтобы пронаследоваться от абстрактного Reader, нужно обязательно определить методы read и close. Вот такая шняга в итоге получилась. Недавно случайно открыл код на этом месте и долго на неё пялился :-)
+123
val ret = method.invoke(this, args:_*)
Превращаем Array[Any] в жабовый Object[] в Scala.
+15
#include <iostream>
#include <functional>
template<class Container, class F, class A>
auto accumulate(Container c, F f, A acc) -> A
{
auto id = [](const A& a) -> const A& {return a;};
typedef decltype(std::begin(c)) Iterator;
const std::function<A(const Iterator& lst, const std::function<A(const A&)>&)> doIt =
[&](const Iterator& lst, const std::function<A(const A&)>& cont) -> A
{
if(lst==c.end())
return cont(acc);
else
{
auto conter=[&](const A& acc) -> A {return cont(f(*lst, acc));};
return doIt(lst+1, conter);
}
};
return doIt(std::begin(c), id);
}
int main() {
std::cout<<accumulate({1,2,3,4}, std::plus<int>(), 0);
return 0;
}
Похоже написал какой-то монадолог.
http://ideone.com/y4Dm9z
Пример использования accumulate сам накатал.
Я побаловался с этим примером, чтобы разобраться и GCC ожидаемо упал:
http://ideone.com/XWfuoP
Я убежден, что эта функция должна была выглядеть как-то так:
template<class Container, class F>
accumulate(const Container& c, const F& f=std::plus<decltype(*(std::begin(c)))>(), const decltype(*(std::begin(c))) acc=decltype(*(std::begin(c)))()) -> decltype(*(std::begin(c)))
{
return std::accumulate(c.begin(), c.end(), acc, f);
}
//Вызов этой функции:
accumulate({1,2,3,4});
let fold_right func acc list =
let rec loop list cont = //сюда мы передаем текущую функцию континуации
match list with
|[] -> cont acc //а вот и наше ключевое вычисление.
|head::tail -> loop tail (fun racc -> cont (func head racc))
loop list (fun x -> x)
+128
data Mode = Start | Read | Skip | End
data State = State Mode String String [String]
space c = elem c [' ', '\n', '\r', '\f', '\t', '\v', '\160']
end r = State End "" "" r
skip t r = State Skip t "" r
get t w r = State Read t w r
start t = State Start t "" []
step (State Start at@(t:ts) w r)
| space t = step $ skip at r
| otherwise = step $ get at w r
step (State Read at@(t:ts) w r)
| space t = step $ skip at $ r ++ [w]
| otherwise = step $ get ts (w ++ [t]) r
step (State Skip at@(t:ts) _ r)
| space t = step $ skip ts r
| otherwise = step $ get at "" r
step (State Start "" _ r) = step $ end r
step (State Read "" w r) = step $ end $ r ++ [w]
step (State Skip "" _ r) = step $ end r
step (State End _ _ r) = r
words' text = step $ start text
Решил все-таки выложить этот позор. Если есть предложения по улучшению - с радостью выслушаю.
−91
// synthesize viewController
@synthesize viewController;
Никогда еще комментарии не были столь информативны.
−98
#import <Foundation/Foundation.h>
int main () {
BOOL b1 = 71151208, b2 = 107155712;
printf ("b1 is %s; b2 is %s.", (b1 ? "true" : "false"), (b2 ? "true" : "false"));
return 0;
}
Ох, как же я эпично выстрелил себе в ногу.
+146
<input name="login" type="text" id="imageName" value="Image Name" onblur="if (this.value == ''){this.value = 'Image Name'; }" onfocus="if (this.value == 'Image Name') {this.value = '';}"/>
А вот так, нужно делать плейсхолдеры к инпутам.
+72
public void load()
{
for(Language lang : Language.VALUES)
{
strings.put(lang, new HashMap<String, String>());
File f = new File(Config.DATAPACK_ROOT, "data/string/strings_" + lang.getShortName() + ".properties");
if(!f.exists())
{
log.warn("Not find file: {}", f.getAbsolutePath());
continue;
}
LineNumberReader reader = null;
try
{
reader = new LineNumberReader(new FileReader(f));
String line = null;
while((line = reader.readLine()) != null)
{
if(line.startsWith("#"))
continue;
StringTokenizer token = new StringTokenizer(line, "=");
if(token.countTokens() < 2)
{
log.error("Error on line: " + line + "; file: " + f.getName());
continue;
}
String name = token.nextToken();
String value = token.nextToken();
while(token.hasMoreTokens())
value += "=" + token.nextToken();
Map<String, String> strings = this.strings.get(lang);
strings.put(name, value);
}
}
catch(Exception e)
{
log.error("Exception: " + e, e);
}
finally
{
try
{
reader.close();
}
catch(Exception e)
{
log.error("Cannot close reader", e);
}
}
}
log();
}
java.util.Properties? Нет, не слышали :)
+134
private static readonly SortedDictionary<Type, ModelConvertor> ModelTypes = new SortedDictionary<Type, ModelConvertor>
{
{ typeof(ObjectType), в => Convert((ObjectType)в) },
{ typeof(ObjectBodyFormat), пятницу => Convert((ObjectBodyFormat)пятницу) },
{ typeof(PropertyId), набухаюсь => Convert((PropertyId)набухаюсь) },
{ typeof(PropertyCategory), нафиг => Convert((PropertyCategory)нафиг) }
};
Сегодня случайно заметил этот крик души в мониторе одного коллеги. Всё-таки, в юникодных идентификаторах есть свой неуловимый шарм...
−107
type<bool> str;
http://ideone.com/Y8TP08
Мы с коллегой обнаружили возможность писать шаблоны на пайтоне. Первым делом написали шаблонную фабрику.