Из эмпирического тестирования кажется, что max()
и min()
в списке вернут первое в списке, которое соответствует max()
/ min()
в случае связи:
>>> test = [(1, "a"), (1, "b"), (2, "c"), (2, "d")]
>>> max(test, key=lambda x: x[0])
(2, 'c')
>>> test = [(1, "a"), (1, "b"), (2, "d"), (2, "c")]
>>> max(test, key=lambda x: x[0])
(2, 'd')
>>> min(test, key=lambda x: x[0])
(1, 'a')
>>> test = [(1, "b"), (1, "a"), (2, "d"), (2, "c")]
>>> min(test, key=lambda x: x[0])
(1, 'b')
И Отличное слежение Джереми подтверждает, что это действительно так.
Переменные повсюду принимаются в виде глобалей в ColdFusion, независимо от того, где они размещены.
<cffunction name="one" returntype="void">
<cfset var wtf="coldfusion">
<cfinvoke method="second">
</cffunction>
<cffunction name="two" returntype="void">
<cfoutput>#wtf#</cfoutput>
</cffunction>
В Пайтоне:
>>> x = 4
>>> y = 1000000
>>> x is 4
True
>>> y is 1000000
False
>>>
Просто попробуй, если не веришь мне!
В php:
easter_date - Получить временную метку Unix для полуночи Пасхи данного года
int easter_date ([int $ year])
В Java (на самом деле, я недавно написал это в другом сообщении SO):
int x = 1 + + + + + + + + + + + + + 1;
System.out.println(x);
SQLite позволяет объявлять столбцы с любым типом данных, который вам нужен. Он ищет несколько конкретных подстрок («INT», «REAL», «TEXT» и т. Д.) Для определения сродства.
Это позволяет использовать объявления типов:
CREATE TABLE Quirks (
X FLOATING POINT, -- = INTEGER affinity because of the "INT"
Y STRING, -- = NUMERIC affinity
);
var_export('false' == 0); // true
var_export('false' == true); // true
var_export('false' == false); // false
EDIT
Как упоминалось в @Kobi, это могло произойти, потому что язык интерпретирует любое значение как «ИСТИНА», кроме « ЛОЖЬ », но не в случае с PHP, где все еще более странно, чем вы думали!
Этот случай полностью задокументирован в главе «Преобразование строки в числа» руководства по PHP, где сказано:
Если строка начинается с допустимого числовые данные, это будет значение использовал. В противном случае значение будет 0 (нуль).
Вот пример:
print (int) 'zero'; // 0
print (int) 'false'; // 0
// but
print (int) '1 - one'; // 1
P.S. Я вижу больше вреда, чем пользы от таких неявных преобразований типов.
Этот старый фаворит PHP - это не только , который WTFish сам по себе, но ошибка разрешения области видимости - одна из тех вещей, которые видят так много разработчиков, что это того стоит проявляя некоторую WTF любовь:
$class = new StdClass();
$class::test();
PHP Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM on line 3
В Ruby вы можете делать некоторые странные вещи с помощью heredocs. Подумайте:
a = <<ONE
This is one. #{<<TWO}
This is two. #{<<THREE}
This is three.
THREE
TWO
ONE
p a # => "This is one. This is two. This is three.\n\n\n"
Рубиновые шлепанцы. «...» и «..» в условных операторах не всегда являются операторами диапазона:
(0..20).each do |x|
if ((x%10) == 5)..((x%10) == 5)
print "#{x} "
end
end
(0..20).each do |x|
if ((x%10) == 5)...((x%10) == 5)
print "#{x} "
end
end
Будет выведено:
5 15
5 6 7 8 9 10 11 12 13 14 15
.. проверяет оба оператора на каждом проходе, ... проверяет только «on» или «off» "в каждом проходе (в зависимости от состояния триггера). Они украдены из awk и sed.
Матц пишет в «Языке программирования Ruby»: «Триггеры - довольно непонятная особенность Ruby, и, вероятно, их лучше избегать ...»
Для тех, кто не знал, PostScript на самом деле является языком программирования. Я немного сошел с ума - я написал программу PostScript, которая вычисляет фрактал Мандельброта с очень высокой степенью детализации. Это действительно печатаемый PostScript, хотя он приведет к сбою многих драйверов печати ...
В любом случае, с чего начать с PostScript ... Вот один: вы действительно можете создать переменную с идентификатором ... ничего.
() cvn 5 def% Присвойте число 5 ... ничему
PostScript - это язык, основанный на стеке. () помещает в стек пустую строку. cvn преобразует его в имя ("/", если вы его напечатаете, потому что всем именам в PS предшествует косая черта). Затем 5 def присваивает ему значение 5. (% - символ комментария)
Вы не можете напрямую вернуть его, например если я скажу «/ print», это не напечатает число 5. Но вы можете получить его обратно косвенно:
() cvn load print% это напечатает число 5
Что еще ... PostScript имеет словари как собственный тип, и вы можете использовать ссылку на массив в качестве ключа к словарю ... но именно ССЫЛКА является ключом, а не массив. Итак:
/ myDict 100 dict def
[0] dup myDict exch 42 put myDict exch get ==% prints 42
myDict [1] 42 put myDict [1] get% выдает неопределенную ошибку
Изменить: Ах да, еще одна забавная вещь ... Попробуйте следующее в приглашении Ghostscript:
1 array dup dup 0 exch put ==
Ого!
Особое значение различных столбцов в Фортране. (Возможно, это совершенно естественно, если вы выросли с перфокартами.)
Одним из побочных эффектов этого является то, что, например, имена переменных усекаются после столбца 72. В сочетании с IMPLICIT NONE
это приводит к молчаливому введению новой переменной, когда имя такой переменной начинается близко к столбцу 72.
Вам потребуется
знать об этом
редактор, который выделяет часть комментария (после колонки 72) другим цветом, чем часть до...
Поскольку я не видел, чтобы кто-нибудь об этом упоминал ... RPG 2 или 3 (Генератор программ отчетов ... он же Rocket Propelled Garbage) - это, безусловно, самый мерзкий язык, который я когда-либо использовал. Он сочетает в себе почти полное отсутствие контроля над потоком программы (Enter вверху файла, Exit внизу), а операторы программирования определяются на основе символов, определенных в определенных столбцах, с использованием фиксированного шрифта (подумайте о ПЕРФОКАРТАХ !!).
Чтобы быть действительно FUBAR, вы должны попытаться программировать на DYL-280. Он сочетал в себе последовательность и логику RPG с синтаксисом COBOL.
Найдите здесь RPG: wikipedia.org / wiki / IBM_RPG
Пример DYL-280: http://99-bottles-of-beer.net/language-dyl-280-224. html
Вот немного возни в отладчике Perl:
DB<1> sub foo { +(1..20) }
DB<2> @bar = foo(); # list of 1, 2, 3, 4...20
DB<3> x scalar @bar # size of list
0 20
DB<4> x scalar foo();
0 ''
Все верно. Когда вы вызываете метод таким образом, скалярный контекст из scalar
распространяется вниз в вызов подпрограммы, превращая безобидно выглядящий ...
в совершенно другой оператор. (Это оператор "флип-флоп", а не оператор диапазона).
JCL Условное выполнение.
//STEP02 EXEC PGM=PROG02,COND=(4,GT,STEP01) .
Эта возможность позволяет выполнять или не выполнять шаг в зависимости от кода возврата от предыдущих шагов. Довольно неплохая возможность.
За исключением пары небольших возможностей, которые вывернули логику наизнанку и назад.
Во-первых, шаг НЕ выполняется, если условие истинно.
Во-вторых, 4,GT,STEP01 на самом деле означает "если код возврата из STEP01 больше 4"
Так что все это означает "Не выполняйте этот шаг, если код возврата из STEP01 больше 4"
Так что все это означает "Не выполняйте этот шаг, если код возврата из STEP01 больше 4". Это почти, но не совсем то же самое, что и наивная интерпретация "Выполнять этот этап, если 4 больше, чем код возврата из STEP01".
Учитывая, что на эти вещи можно смотреть всерьез только в 2.30 утра с бешеным оператором ночного сдвига на другом конце строки, эта двойная двусмысленность приводит к серьезным головным болям.
В Lisp можно скопировать список, скопировать вектор, скопировать структуру, скопировать CLOS-объект...
... но нельзя скопировать массив или хэш-таблицу.
Обратная польская нотация (РПН). Это означает, что аргументы предшествуют функции. Или, другими словами, вы добавляете два и два, записывая 2 +
.
Языки, показывающие, что WTF включает Форт, Postscript (да, лазерных принтеров) и Factor.
.Я думаю, что это на самом деле не "языковая особенность" (C), и я, вполне возможно, очень невежественен в размещении, но я не мог понять, почему это происходит, поэтому я спрошу. Если это окажется связано с какой-то странной языковой особенностью... ну, это действительно сделало меня "WTF", так что это место стоит того.
int a = 0;
int *p = &a;
printf("%d, %d, %d.\n", *p, (*p)++, *p); // Outputs "1, 0, 0.\n" on MinGW's GCC 4.4.1
Почему?
-- редактирование
-- только что получилось, и это не так уж и важно. Теперь я чувствую, как над мной смеются гуру C++. Я думаю, что порядок, в котором вычисляются параметры функции, не определен, так что компиляторы могут вызывать их по своему усмотрению (и я думаю, что читал об этом где-то в документации по boost). В данном случае утверждения аргументов вычислялись задом наперёд, вероятно, отражая соглашение о вызове функции.
.FORTRAN на самом деле не WTF момент, а скорее "Зачем мне набирать весь этот мусорный момент"
IF(12 .gt. 11) THEN
// Do some magic
ENDIF
".gt." сбил меня с толку, когда я немного играл с языком, пока я не понял, что это был символ ">". О, как мне нравится не быть биологом и баловаться в этом дерьме изо дня в день
.Меня всегда интересовало назначение этой функции в математическом классе библиотеки Java Core:
static double expm1(double x); // Returns e^x - 1.
Оглядываясь назад, вычисленная гота FORTRAN довольно странная. Википедия сообщает мне, что некоторые BASIC перестарались.
Другой известный фаворит - вызов Алголя 60-х по имени, передача параметра.
.C# оператор доходности, не странный, но довольно полезный.
http://msdn.microsoft.com/en-us/library/9k7k7cf0(VS.80).aspx
На обычном Лиспе массивы с нулевыми размерами странные, и, естественно, они имеют читаемый синтаксис.
? (aref #0A5)
5
В Bash переменные могут быть и скалярами, и массивами:
$ a=3
$ echo $a
3
$ echo ${a[@]} # treat it like an array
3
$ declare -p a # but it's not
declare -- a="3"
$ a[1]=4 # treat it like an array
$ echo $a # acts like it's scalar
3
$ echo ${a[@]} # but it's not
3 4
$ declare -p a
declare -a a='([0]="3" [1]="4")'
$ a=5 # treat it like a scalar
$ echo $a # acts like it's scalar
5
$ echo ${a[@]} # but it's not
5 4
$ declare -p a
declare -a a='([0]="5" [1]="4")'
ksh делает то же самое, но использует typet
вместо declare
.
Когда вы делаете это в zsh, вы получаете присваивание подстрок вместо массивов:
$ a=3
$ a[2]=4 # zsh is one-indexed by default
$ echo $a
34
$ a[3]=567
$ echo $a
34567
$ a[3]=9
$ echo $a
34967
$ a[3]=123 # here it overwrites the first character, but inserts the others
$ echo $a
3412367
$ a=(1 2 3)
$ echo $a
1 2 3 # it's an array without needing to use ${a[@]} (but it will work)
$ a[2]=99 # what about assignments?
$ echo $a
1 99 3
В C#, почему это не легально?
public class MyClass<T>
where T: Enum
{
}
Было бы неплохо иметь возможность добавлять методы-расширения в Enum's вместе с Func
Re комментарий: Да, вы можете расширить настоящее перечисление, но вот в чем разница:
Вы можете сделать это:
public static void DoSomethingWithEnum(this Enum e)
{
//do whatever
}
но что, если вы хотите взять Func со своим методом, который будет иметь тот же тип, что и перечисление:
public static void DoSomethingWithEnum<T>(this T e, Func<T,bool> func )
where T: Enum
{
//do whatever
}
Таким образом, вы можете вызвать свой метод так:
DayOfWeek today = DayOfWeek.Monday;
today.DoSomethingWithEnum(e => e != DayOfWeek.Sunday);
или что-то в этом роде. У вас есть идея... Это невозможно, и я не уверен, почему...
Perl's CORE::open и стандартная библиотека, имеющая элементы объектной ориентации, замаскированные под процедурный интерфейс:
open ( my $fh, '>', 'foobar');
open - конструктор, который работает по ссылке, возвращаемой функцией my()
, и принимает аргументы '>' и 'foobar'. Более того, это объект, который является благословенным печатным шрифтом (что означает, что он не может держать состояние внутри объекта).
Больше информации о моем perlmonks посту IO::File vs CORE::open здесь: http://www.perlmonks.org/?node_id=763565
Компилятор Fortran, который я использовал много лет назад, обладал интересной особенностью: (a) Цифры сначала хранились в высоком байте; (b) Цифры передавались в подпрограммы по адресу; (c) не было проверки длины во время компиляции.
Так что вы могли бы написать программу, подобную этой: (Извините, если я испортил синтаксис. Прошло много времени с тех пор, как я написал Fortran.)
INTEGER*2 FUNCTION TIMESTWO (INTEGER*2 N)
RETURN N*2
... THEN CALL THIS SOMEWHERE WITH A LONG INTEGER ...
INTEGER*4 I, J
I=42
J=TIMESTWO(I)
Окончательное значение J равно ... нулю!
Почему? Потому что передаваемое значение равно 4 байтам, но вызываемая функция смотрит только на первые два байта. Так как первые два байта равны нулю, то она удваивает ноль и возвращает его. Это возвращаемое значение затем преобразуется обратно в четыре байта.
Это было очень загадочно, когда я впервые столкнулся с этим. Почти каждое число, которое я передал некоторым функциям, интерпретировалось как ноль!
. Что-то странное - в VBScript есть ключевое слово Null
и ключевое слово Nothing
( Null
отсутствуют данные и ] Ничего
- это недостающий объект). Почему бы не использовать одно ключевое слово ...? Кажется, что большинство других языков прекрасно справляются с одним!
Visual Basic 6.0 и, конечно же, «классический ASP» код (потому что он использует VBScript) имеют одинаковую причудливость. И в старом, и в новом Visual Basic у нас также есть DBNull
.
Однако ситуация улучшается, поскольку в Visual Basic.NET Null
наконец-то исчез, так что Null
не используется и только Nothing
и ] DBNull
.
Спасибо за ответы, я играл вокруг с этим, и после некоторой помощи от моего друга Google я нашел Каир пакет, который позволяет создавать файлы svg, я могу затем редактировать их в Inkscape .
library(Cairo)
Cairo(600,600,file="testplot.svg",type="svg",bg="transparent",pointsize=8, units="px",dpi=400)
testplot
dev.off()
Cairo(1200,1200,file="testplot12200.png",type="png",bg="transparent",pointsize=12, units="px",dpi=200)
testplot
dev.off()
Теперь я просто должен играть с различными настройками, чтобы получить мой график как можно лучше, прежде чем написать файл.
-121--3320749-Это классическая проблема производителя/потребителя. Это можно решить с помощью переименования файлов, которое является атомарным в системах POSIX.
-121--1462283-Очень маленькая вещь, которая раздражала меня в COBOL, заключалась в том, что не было специальной операции по модулю. Вместо этого можно сделать деление, указывающее, что нужны только целые числовые результаты, а остальные сохранить в другой переменной. Поскольку COBOL очень чувствителен, когда дело доходит до переменных, это означает, что вы в конечном итоге с переменной, которая вам не очень нужна, то есть фактический результат деления. Это история о том, как я однажды назвал переменную «БЕСПОЛЕЗНО» - это было самое подходящее имя, которое я мог бы придумать.
Я не могу поверить, что это еще не здесь: Доступ к недвижимости JSF .
В теге jsf-интерфейса вы получите значение свойства от объекта сервера в интерфейс, ссылаясь на него таким же образом:
<h:inputText value="#{myObject.property}></h:inputText>
Дело в том, что Java не поддерживает свойства, поэтому вы должны написать Методы, начинающиеся с GET и SET, чтобы связать объект пользовательского интерфейса к «свойству» на сервере.
public void setProperty(String property){...}
public String getProperty(){...}
Это запутало меня, когда я впервые узнал JSF, и я все еще считаю, что WTF-достойным ... хотя на самом деле на самом деле нет другого способа сделать это до тех пор, пока Java не реализует поддержку Свойства C # -лей.
Вы настроили Trust Store для вашего соединения?
-121--5044751-в SQL Server (MS, по крайней мере):
Это всегда будет оценивать значение false:
IF @someint <> NULL
Дано:
DECLARE @int INT
SET @int = 6
IF @int <> NULL
BEGIN
Print '@int is not null'
END
ELSE
BEGIN
Print '@int is evaluating to null'
END
Вывод будет:
@int is evaluating to null
Это должно быть написано:
IF @someint IS NOT NULL
BEGIN
END
Кто поставил английские майоры на команду SQL! :)