あなたの意見では、あなたが遭遇した中で最も驚くべき、奇妙な、奇妙な、あるいは本当に "WTF"言語の特徴は何ですか?
1つの回答につき1つの機能だけを入力してください。
ルビーフリップフロップ。条件文の "..."と ".."は必ずしも範囲演算子ではありません。
(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から盗まれます。
Matzは "Rubyプログラミング言語"で書いている: "フリップフロップはRubyのかなりあいまいな機能であり、おそらく最も避けることが..."
var_export('false' == 0); // true
var_export('false' == true); // true
var_export('false' == false); // false
_編集_
@Kobiが述べたように、それは言語が "FALSE"以外の "TRUE"としてどんな値でも解釈するが、物事があなたが思ったよりもっともっと奇妙であるPHPの場合ではないので起こるかもしれない!
この場合はPHPマニュアルの "文字列から数値への変換"の章で詳しく説明されています。
文字列が有効な数値データで始まる場合は、これが使用される値になります。それ以外の場合、値は0(ゼロ)になります。
これが例です。
print (int) 'zero'; // 0
print (int) 'false'; // 0
// but
print (int) '1 - one'; // 1
P.Sそのような暗黙の型変換の有用性よりも私はもっと害があると思います。
RPG 2または3(Report Program Generator ...別名Rocket Propelled Garbage)は、私がこれまでに使った中で最も間違いのない言語です。これはプログラムの流れをほとんど制御せず(ファイルの先頭で入力し、末尾で終了)、プログラミングステートメントは固定フォントを使用して特定の列で定義された文字に基づいて定義されます(PUNCH CARDSと思います)。
本当にFUBARになるためには、DYL-280でプログラムを試みなければなりません。 RPGフローとロジックをCOBOL構文と組み合わせました。
RPGはここを見てください:wikipedia.org/wiki/IBM_RPG
DYL-280の例: http://99-bottles-of-beer.net/language-dyl-280-224.html
知らない人にとっては、PostScriptは実際にはプログラミング言語です。私はそれに少し気が狂いました - 私は非常に高いレベルの詳細までマンデルブローフラクタルを計算するPostScriptプログラムを書きました。本当に印刷可能なPostScriptですが、多くの印刷ドライバをクラッシュさせます….
とにかく、PostScriptから始める場所...これが1つです。実際には、識別子が....なしの変数を作成できます。
()cvn 5 def%5に5を割り当てて...何もしない
PostScriptはスタックベースの言語です。 ()スタックに空の文字列を置きます。 cvnはそれを名前に変換します(PSのすべての名前の前にスラッシュがあるため、印刷する場合は "/"です)。それから5 defはそれに値5を割り当てます。 (%はコメント文字)
直接取り戻すことはできません。私が "/ print"と言っても、数字の5は印刷されません。しかし、間接的に戻すことができます。
()cvn load print%これは数字5を表示します
PostScriptはネイティブ型として辞書を持っています、そしてあなたは辞書へのキーとして配列参照を使うことができます...しかしそれはキーであり、配列ではないREFERENCEです。そう:
/ myDict 100ディクトルフ
[0] dup myDict exch 42 put myDict exch get ==%プリント42
myDict [1] 42 put myDict [1] get%は未定義エラーをスローします
編集: /もう1つ楽しいこと... Ghostscriptプロンプトで次のことを試してください。
1 array dup dup 0 exch put ==
あー!
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"
私のC++のお気に入りの1つ:
#include <iostream>
using namespace std;
int main()
{
cout << 3 << 5 << endl;
cout << (3 << 5) << endl;
return 0;
}
もちろん、これは簡単に説明できますが、プログラミングの学生が頭を悩ませ始めています。
RSLプログラミング言語は、1つの奇妙な銀行システムで使用されています。配列用の組み込みクラスTArray
があります。しかし、そこから継承すると、すべてのインスタンス変数は配列の要素になります。
class (TArray) DerivedArray
var someField = 56;
end
var a = DerivedArray();
PrintLn(a.Size); // => 1
PrintLn(a[0]); // => 56
_ php _ backticks
/から http://www.php.net/manual/en/language.operators.execution.php
PHPは1つの実行演算子をサポートしています:バックティック( ``)。これらは一重引用符ではありません。 PHPは、バッククォートの内容をシェルコマンドとして実行しようとします。出力が返されます(つまり、単純に出力にダンプされるのではなく、変数に割り当てることができます)。
$output = `ls -al`;
echo "<pre>$output</pre>";
まあ、コード内ではなく「見つける」ことは「非常に簡単」です。
これも面白いですね。
多くのトラブルの後、私はバッククォート演算子(そしてShell_exec)がリターンのために 制限されたバッファ を持っていると結論しました。私の問題は、私が50万行を超えるファイルを持っていて、10万行をはるかに超える応答を受け取っていたことです。しばらくして、私はパイプが閉じられていることについてgrepからのエラーであふれました。
これが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
からのスカラーコンテキストはサブルーチン呼び出しに伝播し、無害に見える..
を まったく異なる演算子 に変換します。 (これは範囲演算子ではなく、「フリップフロップ」演算子です)。
機能:Bash、Kornシェル(ksh93)、およびZシェルはそれぞれ、ドル記号付きまたはドル記号なしの変数を使用した配列の添え字付けを許可します。
array[index]=$value
array[$index]=$value
これは、ドル記号で、10000の期待値を生成します。
unset array
for i in {1..10000}
do
((array[$RANDOM%6+1]++))
done
unset total
for count in ${array[@]}
do
((total += count))
done
echo $total
Strangeness:RANDOMからドル記号を削除すると、合計は10000を超えるようにランダムに変化します。
同様に、これは2ではなく3を生成します。
a=1; ((r[a++]++)); echo $a
そして、インダイレクションを使用している場合は実行できますが、割り当てであるため、そこにドル記号を使用することはできませんが、二重評価は依然として発生します。
理由:ドル記号を使用すると、変数の展開は算術評価の前に実行されるため、一度だけ実行されます。ドル記号なしで、2回実行されます。1回はルックアップのインデックスを計算し、もう1回は割り当てのインデックスを計算します(したがって、実際には、ループの1ステップでの割り当てはarray[4] = $array[6] + 1
のようになります。配列をスクランブルします)。
(MRI/C)RubyとMacRuby(しかしJRubyにはない)でシステムロールオーバーが発生し、その後にローカルタイムエラーが発生した場合はどうなるでしょうか。一般的な問題ではありませんが、奇妙なことです。
$ Ruby -version
Ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
$ irb
>> Time.at(67767976233550799)
=> Tue Dec 31 23:59:59 -0500 2147483647
>> Time.at(67767976233550800)
=> Wed Jan 01 00:00:00 -0500 -2147483648
>> Time.at(67768036191694799)
=> Wed Dec 31 23:59:59 -0500 -2147481749
>> Time.at(67768036191694800)
ArgumentError: localtime error
...
Maybe IRB bug!!
ただし、これは64ビット環境に固有の場合があります。
奇妙なもの-Null
キーワードとNothing
キーワードの両方を持つVBScript(Null
はデータがなく、Nothing
はオブジェクトがありません)。キーワードを1つだけ持たないのはなぜですか?他のほとんどの言語は1つでうまくいくようです!
Visual Basic 6.0と(もちろん、VBScriptを使用しているため) "Classic ASP"コードも同じ奇妙さを持っています。 Visual Basicの新旧には、DBNull
もあります。
ただし、Visual Basic.NETのNull
はようやくなくなったため、Null
は使用されず、Nothing
とDBNull
のみが使用されます。
sa = "a =" "a =" "" "a" "" "、@ a =" "" "2N" "" "、a =" "" "c =" "" "_(" "" " 22 "" ""?@ a)、@ a ""、@ a、a = "" a ""、a(c)= "" S + "" _ c、e = $ T(@@ a @(c) ) "、@ a
これはCOS(cache objectscript)のいい一行です。ここで注意すべき面白いことは、コード間接化の5つの異なるモードです* G
これらの残りの部分は、驚くべきRuby Flip-Flop Operatorには何も関係ありません。
p = proc {|a,b| a..b ? "yes" : "no" }
p[false,false] => "no"
p[true,false] => "yes"
p[false,false] => "yes" # ???
p[false,true] => "yes"
p[false,false] => "no"
はい、プログラムの状態はインタプリタの解析木に格納されています。このようなことが、準拠したRuby実装を作るのに永遠にかかる理由です。 Ruby <3
PHPでは、次のようになります。
<?php $foo = 'abc'; echo "{$foo";
構文エラーです。
実際に{
が必要で、その後に$foo
の内容が続く場合は、.
を使用する必要があります。
<?php $foo = 'abc'; echo '{' . $foo;
Processing(processing.org)はJavaに基づく言語です。簡単に言うと、処理コンパイラは、処理固有の構文をJavaに変換するJavaプリプロセッサです。
言語の設計上、いくつかの驚きがあります。
ProcessingのクラスはJavaの内部クラスにコンパイルされます。これは、実際にはプライベートではないプライベート変数のように、いくつかの煩わしさを引き起こします。
class Foo {
private int var = 0; // compiles fine
}
void setup() {
Foo f = new Foo();
print(f.var); // but does not causes compile error
}
draw()関数も欠けていると、イベントハンドラは呼び出されません。
// void draw() {} // if you forgot to include this
void mousePressed() {
print("this is never called");
}
逆ポーランド記法(RPN)。これは引数が関数の前にくることを意味します。あるいは、2 2 +
と書くことで、2と2を足します。
そのWTFを特色とする言語には、Forth、PostScript(はい、レーザープリンタ)、およびFactorがあります。
私が何年も前に使った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バイトなので、呼び出された関数は最初の2バイトだけを調べます。最初の2つはゼロなので、ゼロを2倍にして返します。この戻り値は4バイトに変換されます。
私が初めてそれに出会ったとき、これは非常に不思議でした。特定の関数に渡したほぼすべての数がゼロとして解釈されました。
COBOLで私を悩ませた非常に小さなことは、専用のモジュロ演算がなかったことです。代わりに、整数の結果のみを求め、残りを別の変数に格納するように指定して除算を行うことができます。 COBOLは変数に関しては非常に敏感なので、それはあなたが本当に必要としていなかった変数、つまり除算の実際の結果になったことを意味します。これは私がどうやって変数に「USELESS」という名前を付けたかの物語です - それは私が考えることができる最も適切な名前でした。
PerlのCORE :: openと、手続き型インターフェイスでマスクされたオブジェクト指向の要素を持つ標準ライブラリ:open ( my $fh, '>', 'foobar' );
openは、my()
によって返される参照を操作し、引数 '>'をとるコンストラクタです。 「foobar」。さらに、それは祝福されたタイプグロブであるオブジェクトであること(オブジェクト内に状態を保持できないことを意味します)。
Perlmonksの投稿の詳細IO :: File vs CORE :: openここ: http://www.perlmonks.org/? node_id = 763565
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も同じことをしますが、typeset
の代わりに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
SQLサーバー(少なくとも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チームに英語専攻を入れました! :)
オハイオ州立大学では、Resolve/C++と呼ばれる標準的なC++言語を使用してプログラミングを教えています。 Resolve/C++はすべてのものに対して契約による設計方法を使用します。メソッドとオブジェクト間の必須/確実な関係を維持することを強制するように、コンパイルされるコメント内のコンポーネントとメソッドを数学的にモデル化する必要があります。
C++では、保護された抽象仮想ベースの純粋仮想プライベートデストラクタを作成する機能。
これは、保護された抽象仮想ベースから継承された純粋な仮想プライベートデストラクタです。
IOW、クラスのメンバーまたは友人(private)によってのみ呼び出すことができ、それを宣言する基本クラス(abstract base)に0(純粋仮想)が割り当てられ、後で定義される/ overriden保護された方法で多重継承された基底(仮想基底)を共有する派生クラスで。
rubyでは...
i=true
while(i)
i=false
a=2
end
puts defined?(a) // returns true
FORTRANは実際にはWTFの瞬間ではありませんが、むしろ「なぜこのゴミの瞬間をすべて入力する必要があるのですか」です。
IF(12 .gt. 11) THEN
// Do some magic
ENDIF
「.gt」私がそれが ">"記号であることに気づくまで、私がその言語で少し遊んでいたときに私を捨てた。ああ私はどのように私は生物学の専攻学生ではないし、このがらくたに手を出していなければならないのが大好きです
Common LISPでは、次元0の配列は奇妙であり、当然、それらは読み取り構文を持っています。
? (aref #0A5)
5
これは実際には「言語機能」(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のドキュメントのどこかでそれを読んだと思います)。この場合、引数ステートメントは逆方向に評価され、おそらく関数の呼び出し規約を反映しています。
LISPでは、リストをコピーすることができます、そしてあなたはベクトルをコピーすることができます、そしてあなたはstructをコピーすることができます、そしてあなたはCLOSオブジェクトをコピーすることができます...
...しかし、配列やハッシュテーブルはコピーできません。
技術的には言語のWTFではなく、アーキテクチャのものです。
http://www.6502.org/tutorials/6502opcodes.html#JMP
6502アセンブリ、間接JMP:
間接ジャンプに関連するキャリーはないことに注意してください。
間接ジャンプは絶対にAを使用しないでください
最後のバイトのベクトル開始
ページの
例えば、アドレス$ 3000に$ 40が含まれ、$ 30FFに$ 80が含まれ、$ 3100に$ 50が含まれる場合、意図したとおりにJMP($ 30FF)の結果は$ 5080ではなく$ 4080に制御が移管されます。 $ 30FFからそして$ 3000からの上位バイト。
そのため、コードに1バイトを追加すると、間接ジャンプがターゲットから大きく外れる可能性があります。
午前中に同居できるのであれば、Perlは自動的に基数26を基数10に変換することができます。
$ Perl -E "say lc (@a='a'..'asdf')"
30530
これがまだここにないとは思えない: JSFプロパティへのアクセス 。
JSF UIタグでは、次のように参照して、サーバー側オブジェクトのプロパティの値をインタフェースに配置します。
<h:inputText value="#{myObject.property}></h:inputText>
つまり、Javaはプロパティをサポートしていないため、UIオブジェクトをサーバー上の「プロパティ」にリンクするには、getおよびsetで始まるメソッドを作成する必要があります。
public void setProperty(String property){...}
public String getProperty(){...}
私がJSFを最初に学んだときにこれは私を混乱させ、私はまだそれがWTFに値すると考えています…JavaがC#スタイルのプロパティのサポートを実装するまでは他にはありません.
英語の主観的な場合。
ああ、あなたはプログラミング言語を意味しましたか?次に、Cで(macro)
を使用して、macro()
のプリプロセッサ#define
をバイパスします。たとえば、誰かが#define free(...)
を持っている場合、(free)(...)
はfree(...)
と同じにはなりません。
_ comefrom _ だれか?
JCL条件付き実行.
//STEP02 EXEC PGM=PROG02,COND=(4,GT,STEP01) .
この機能により、前のステップからの戻りコードに応じてステップを実行することも、実行しないこともできます。とてもいい機能です。
ロジックを裏返しにする2つの小さな機能を除いて。
最初に、条件が真であればステップは実行されません。
次に、4、GT、STEP01は実際には「STEP01からの戻りコードが4より大きい場合」を意味します。
つまり、「STEP01からの戻りコードが4より大きい場合は、このステップを実行しない」ということです。これは、「4がSTEP01からの戻りコードより大きい場合はステップを実行する」という単純な解釈とほとんど同じですが、まったく同じではありません。
あなたがこれらのことを真剣に見た時だけが、列の反対側の必死の夜勤オペレータと一緒に約2.30 amであることを考えると、この二重のあいまいさは深刻な頭痛につながります。
これは奇妙な機能ではありません。実際に考えてみると、実際にはまったく意味がありますが、それでもWTFの瞬間を教えてください。
C++(およびC#)では、基本のサブクラスは、基本のインスタンス上の非公開メンバーおよび保護メンバーにアクセスできません。
class Base {
protected:
m_fooBar;
};
class Derived: public Base {
public:
void Test(Base& baseInstance) {
m_fooBar=1; //OK
baseInstance.m_fooBar = 1; //Badness
//This, however is OK:
((Derived&)baseInstance).m_fooBar = 1; //OK
}
};
私は昔、BUT句を使って言語を作成しました。
Cプリプロセッサとその使用法具体的には、プリプロセッサのメタプログラミングと、プリプロセッサを使用した移植可能なコードの生成 - 合計mindfcuk。
C#では「動的」です。
Intellisense、型安全性、決定論は "dynamic"キーワードの最初の使用で即座に死んでしまうので、RADまたはpythonの犠牲者と一緒に仕事をしなければならないすべての人にとって一日を台無しにします。
C#には、「拡張メソッド」と呼ばれる機能があります。これは、Rubyのミックスインとほぼ同じです。基本的に、既存のクラス定義にメソッドを追加できます(たとえば、Stringに「reverse()」を追加する必要があります)。とても傾いていました)。それだけで大丈夫です - "奇妙な"部分は、これらの拡張メソッドをメソッド本体とすべてのものと共に interface に追加できることです。一方で、これは、同じ継承ツリーの一部ではないクラス全体に単一のメソッドを追加する方法として便利です。もう一方では、具体化されたメソッドをインタフェースに追加しているため、本質的にインタフェースの定義が壊れています。
振り返ってみると、FORTRANの計算後藤はかなり奇妙です。 ウィキペディアに教えてください いくつかのBASICがそれをしのぎます。
もう一つの有名なお気に入りはALGOL 60の 名前による呼び出し パラメータ渡しです。
_ j _ では、ほとんどのプリミティブ(別名関数)は二項式(1つの引数)または2項式(2つの引数、左に1つ、右に1つ)です。しかし、修正プリミティブには3がかかります(私はそれが唯一のものだと思いますが、外国為替以外に)。それは3がかかるだろうことは理解できますが、それはちょうど...最初は間違って見えます。
vector =: i. 10 NB. Vector will be 0 1 2 3 4 5 6 7 8 9
(10) (0) } vector NB. Will yield 10 1 2 3 4 5 6 7 8 9
私はいつも、JavaコアライブラリのMathクラスでこの関数の目的について疑問に思いました。
static double expm1(double x); // Returns e^x - 1.
_ j _ では、foreigns(!:
)は束ねられたさまざまな関数です。左側の引数はカテゴリであり、右側はさまざまなものに対する増分値であることが多いですが、常にではありません。例えば:
2!:55 NB。コンソールを閉じる 9!:10 NB。印刷精度を設定する 6!:0 NB。実時間 6!:2 NB。実行時間 4!:3 NB読み込まれたスクリプト
もちろん、賢いことはそれらをラップすることですが、あなたはただメモリにコミットする人もいます。ところで、それらのすべては、それを考えるようになった、2つの引数を右側に、1つを左側にして、三つ組です。あなたがそれらに最終的な有効な議論を与えない限り、上記のどれもはたらきません。
PHPでは、クラス変数にグローバルを明示的に参照し、 this-> を明示的に使用する必要があります。リファクタリングを楽しくします。すべての使用方法を見つけずに、変数または引数をグローバルまたはクラスメンバーに昇格させることはできません。
Cでは、a[b][c]
はc[b[a]]
とまったく同じものです。
Fooとはどんなデータ型ですか?
SELECT TOP 1
NULL AS foo
INTO
dbo.bar
FROM
sys.columns --trivial
なぜすべてがゼロになるのですか?
SELECT CAST('' AS int), CAST('' AS datetime), CAST('' AS float)
これ以外は・・・
SELECT CAST('' AS decimal)
HaskellによるMaybe
とJust
の使用。 Maybe a
はJust a
の型を返す型コンストラクタですが、Maybe Int
は単なるInt
を受け入れないため、Just Int
またはNothing
である必要があります。だから、本質的にhaskellの用語で言うと、Just Int
はAppleがオレンジ色であるのと同じくらいのIntだ。唯一の接続は、Just 5
がMaybe Interger
の型を返すということです。これは、関数Just
およびInteger引数を使用して構成できます。これは理にかなっていますが、理論的に可能な限り説明するのは難しいですが、どちらが正しいのでしょうか。それでJust
は本当にJustKindaLikeButNotAtAll
そうそう、またMaybe
は本当にKindaLooksLikeOrIsNothing
、そうそうそうです。
-- Create a function that returns a Maybe Int, and return a 5, which know is definitly Int'able
> let x :: Maybe Int; x = 5;
<interactive>:1:24:
No instance for (Num (Maybe Int))
arising from the literal `5' at <interactive>:1:24
Possible fix: add an instance declaration for (Num (Maybe Int))
In the expression: 5
In the definition of `x': x = 5
> Just 5
Just 5
it :: Maybe Integer
-- Create a function x which takes an Int
> let x :: Int -> Int; x _ = 0;
x :: Int -> Int
-- Try to give it a Just Int
> x $ Just 5
<interactive>:1:4:
Couldn't match expected type `Int' against inferred type `Maybe t'
In the second argument of `($)', namely `Just 5'
In the expression: x $ Just 5
In the definition of `it': it = x $ Just 5
これを読んで幸運、私はその権利を願っています。
ColdFusionでは、テキスト値はさまざまな目的のために自動的にさまざまなデータ型に変換されます。 "00A"と "000"が同じように返されているという奇妙な問題が発生しました。 ColdFusionは "00A"を時間として解釈し、ある種の数値時間形式に変換し、それを0に変換していたことが判明しました。それが、文字列の比較機能について学んだときです。
それほど遠くない昔、私が最初に私のCSクラスでC言語を発見したとき、ポインタがどのように振る舞うのか見るのは非常に奇妙でした。私たちはただプログラムを書いて、それが正しい振る舞いになるまで何をするのかを推測します。
Smalltalk:
Testクラスにクラスメソッドを用意します。これは定数文字列を返します。
method1
^ 'niko'
このメソッドは、何が起こっても常に文字列 'niko'を返すことを期待してください。しかし、そうではありません。
s := Test method1
(sを 'niko'に設定してください。)
s at: 4 put: $i.
(sを 'niki'に設定してください。)
s := Test method1
(sをもう一度 'niki'に設定してください。)
そのため、メソッドのソースコードが更新されていなくても、2行目のコードでmethod1が 'niko'ではなく 'niki'を返すように恒久的に変更されました。
Pythonの三項演算子
Pythonでは、C言語の三項演算子(C++の例:bool isNegative = i < 0 ? true : false;
)が構文糖として使用できます。
>>> i = 1
>>> "It is positive" if i >= 0 else "It is negative!"
'It is positive'
>>> i = -1
>>> "It is positive" if i >= 0 else "It is negative!"
'It is negative!'
それは本当に奇妙ではなく特徴です。奇妙なことは、Cの(IMOより論理的な)順序(CONDITION?A:B)と比較して順序が変更されたこと(条件がA以外の場合はB)です。
暗黙の変数\定数とRubyの可変定数
try: pass
except: pass
else: pass
finally: pass
例外がキャッチされなかった場合は、else部分が実行されます。
理にかなっているが、最初は私は本当にそれが何をするのかについての手がかりを全く持っていなかった。
例 :
def show_square(string):
try:
n = int(string, 10)
except ValueError:
print "I can't do that, Dave."
else:
print n * n
Tclがインタプリタのタイムフックの感覚を仮想化するのはかなり変です: http://www.tcl.tk/cgi-bin/tct/tip/233.html
基本的には、インタプリタに他の時間データのソースを使用させることができます。最初にシミュレータでハードウェアテストを実行し、後でタイマー機能を置き換えて、実際のものに対して同じテストを実行します。
Awkでは、配列はインデックス1から始まります。
C#では、なぜこれは合法ではないのですか?
public class MyClass<T>
where T: Enum
{
}
EnumにFunc <T>と一緒に拡張メソッドを追加してTが拡張する列挙型になるようにすると、その列挙型で型推論ができるようになるのはかなりクールです。
コメントについて:はい、実際の列挙型を拡張することはできますが、違いは次のとおりです。
あなたはこれを行うことができます:
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);
それとも何か。あなたはアイデアを得ます...それは不可能です、そして私は理由がわかりません...
JavaScriptでは、2.0 - 1.1 = 0.8999999999999999
です。これは仕様でのfloatの実装の結果であるため、常にこのようになります。
/ ccを呼び出します。/ccを呼び出すと、プログラムの残りの部分を表す関数が本体に渡されます。
MySQLでは、文字列比較は大文字と小文字を区別しません。
> SELECT * FROM blah WHERE foo = 'BAR';
> SELECT * FROM blah WHERE foo = 'Bar';
> SELECT * FROM blah WHERE foo = 'bAr';
すべて同等です。それらが 'bar'のように見えるfooの任意の値に一致するということだけではありません(例えばfoo = 'bar'の場合、それはBAR、baR、bARなどに一致します)。
C#では、次のコードで「メソッドグループからデリゲートに変換できません」というコンパイラエラーが発生します。その背後にある論理は合理的ですが、それでも私には奇妙な感じがします。
control.BeginInvoke(delegate { DoSomething(); });
SQL Serverでは、プロダクションコードでselect *
を使用すると、厄介な驚きが生じる可能性があります。とにかくselect *
を使うことは良い習慣とは考えられていませんが、面白い振る舞いを知っておくのは良いことです。
SqlServer2005での質問 「テーブルからのselect *」と「テーブルからのcolA、colBなどの選択」の興味深い動作を参照してください
ColdFusionの場合
構造体 (別名Java HashMap)は参照渡しです。
あなたは他のデータ型がJavaのように振る舞うと思っていたでしょう...
配列 is 値渡し 、wtf!
List は単なる の単純なカンマ区切りの文字列です。
Javaソースファイルは文字\u001a
(control-Z)で終わることができます。
私の頭に浮かんだ最初のことは 'noop'でした、私が最初に頭に浮かんだときにも私の脳は同じことをしました!
これは私を驚かせました
#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}
Goの 擬似定数Iota:
type ByteSize float64
const (
_ = iota; // ignore first value by assigning to blank identifier
KB ByteSize = 1<<(10*iota); MB; GB; TB; PB; YB;
)
シフト;
場合によっては、Perlメソッドの最初の行にセルフポインターを読み取るために表示されることがあります。
Javaのbreakおよびcontinueステートメントにラベルを付けた。 。
それらはあなたが一回のブレークで複数のコントロールブロックから抜け出すことを可能にします。
それがまだ真実かどうかはわかりませんが、VS FORTRAN(66または77)が再帰をサポートしないことを偶然にも発見しました。再帰は偶然のものであり、私たちのデフォルトのF77はそれを美しくサポートしていましたが、その情報をIBM-Whatta Messに渡したとき.
Perl
my %h1 = map { $_ => 1 } qw/foo bar baz/; // construct an 'is_member' type lookup table
my %h2 = map { "$_" => 1 } qw/foo bar baz/;
2行目は、経験豊富なPerlプログラマーにとっても同一のように見えますが、構文エラーです。 Perlにとってのマイナス面は、あなたが言ったことではなく、常にあなたが意味することをやろうとすることです。
C#のyieldステートメント、変ではなくかなり有用.
http://msdn.Microsoft.com/ja-jp/library/9k7k7cf0(VS.80).aspx
これがpythonに関するものです。
>>> print 07
7
>>> print 08
File "<stdin>", line 1
print 08
^
SyntaxError: invalid token
それは美人ではないですか?
あなたが人間がどのように日付を書くかを考えるとき、特に気にかけない、それは以下の効果を持ちます:
datetime.date(2010,02,07) # ok
datetime.date(2010,02,08) # error!
(その理由は0x
は8進数として解釈されるので、print 010
は8
を表示するためです!)
私は絶対に意味をなさないがとにかく働いたマクロを見つけようとしているときに私はこれに出会いました。これはObjective-Cにも当てはまりますが、Cの他のフレーバー(または少なくともgccコンパイラ)にも当てはまるかもしれません。
NSString *oneString = @"This " @"is " @"just " @"one " @"normal " @" string";
等しい
NSString *oneString = @"This is just one normal string";
Cスタイルの文字列についても同様です。
char* str = "this " "also " "works";
Pythonでは、少なくとも私にとっては、これは非常にwftでした。私が初めてそれを見たのは、
>>> "ja " * 5
'ja ja ja ja ja '
あなたは文字列を掛けることができます! WTF?
シモンズ:これはx * n
がn times x
を意味するからだと思います。5 times "ja "
は"ja ""ja ""ja ""ja ""ja "
であり、あなたはこのように文字列を連結できるからです。
>>> "ja ""ja ""ja ""ja ""ja "
'ja ja ja ja ja '
2つのコードが同じ結果になる(そしておそらく同じである)
Javaでは、構築方法によっては、Stringが==演算子をどのように処理するかについて、いくつかの矛盾があります。
String a = "Hello";
String b = "Hello";
System.out.println(a == b ); // prints true.
String c = new String("Hello");
String d = new String("Hello");
System.out.println(c == d ); // prints false
Schemeには - 予約済みの識別子があります。したがって、次の式は1に評価されます。
((lambda (lambda) lambda) (let ((let 1)) let))
与えられたスコープ内の定義には制限があることに注意してください。定義がそのスコープ内で識別子を定義するために使用される識別子を再定義することはできません。
(begin (define define 1) define)
Unityでは、
GameObject.Find("MyObject")
通常あなたのオブジェクトを返します。しかし、あなたがこのような何かをするならば:
GameObject.Find("MyObject").active = false;
//do other stuff
if (GameObject.Find("MyObject").active)
{
//do stuff
}
その後、null参照を取得します。 Unity iPhoneでは、このコードはエディタではうまく機能しますが、iPhoneから実行するとSIGBUSが発生します。問題は、GameObject.Find()はアクティブなオブジェクトだけを検索するため、アクティブかどうかを確認しているだけでも、事実上if(null.active)を呼び出していることです。
正しく機能させるためには、非アクティブにする前に保存する必要があります。
GameObject obj = GameObject.Find("MyObject");
obj.active = false;
//do other stuff
if (obj.active)
{
//do stuff
}
とにかくそれはおそらくより良いやり方ですが、Unityが一般に非アクティブオブジェクトを扱う方法はかなり奇妙です。非アクティブなオブジェクト(テクスチャなど)の大部分はアンロードされているように見えますが、すべてではないため、非アクティブなオブジェクトは依然として多くのメモリを消費する可能性があります。
そしてまたHaskell:
Haskellでは、単純なString
のように任意のサイズのファイルを扱うことができます。文字列が実際に使用されている場合、ファイルは読み取られるだけです。 Haskellの信じられないほどの怠惰さのため、このようなプログラムはファイルのサイズにかかわらず、一定のスペースで実行されます。
main = interact (>>= \x -> if x == '\n' then "\r\n" else [x])
(このプログラムは標準入力から標準出力にファイルを変換し、LFをCRLFに置き換えます。interact
関数の入力全体は標準入力に変換され、出力は標準出力に移動されます。)
ファイルハンドルを閉じると、lazy Haskellがすでにそこからすべてのデータを解析しているかどうかを完全に判断することはできないため、この遅延は問題を引き起こす可能性もあります。
これは奇妙なことでも驚くべきことでもありませんが、 は なのでいつも _ wtf _ と言っています。
構文または識別子名での大文字と小文字の区別。
それを持っているほとんどの言語はちょうどCが持っているのでそれを持っているようです。それには正当な理由はありません。
このCプログラムは、x86とx86-64で異なる結果を出力します。
#include <stdio.h>
int main (void)
{
long a = -1;
unsigned b = 1;
printf ("%d\n", a > b);
return 0;
}
javaで
String("aaa")==String("aaa") //false
//you need to use
String("aaa").equals(String("aaa")) // true
С#:
var a = Double.Parse("10.0", CultureInfo.InvariantCulture); // returns 10
var b = Double.Parse("10,0", CultureInfo.InvariantCulture); // returns 100
不変カルチャでは、カンマは小数点記号ではなく、グループ区切り記号です。
私が知っているように、それはいくつかのロケールからの初心者プログラマにとってはよくある間違いです。
C++では、「仮想」MI(多重継承)によって「ひし形」クラス階層が「機能する」ことが可能になるのは奇妙で不愉快です。
A : Base class, e.g. "Object" B, C: both derive (virtually or not) from Object and D: derives from both B and C
問題: "通常の"継承により、Dは2種類のあいまいなAになります。 "仮想" MIは、BのAとCのAを単一の共有ベースAオブジェクトに折りたたみます。
したがって、あなたのホイールがオブジェクトで、あなたの左前のホイールがホイールで、あなたの車が4種類のホイールを継承していても、あなたの車はまだ仮想MIを持つ1種類のオブジェクトにすぎません。それ以外の場合、あなたの車はオブジェクトではなく、4輪のオブジェクトです。
これは、貧弱なクラス設計に報酬を与え、コンパイラの作者を罰し、実行時にObjectが実際には一体どこにあるのか、そして仮想MIの手荷物が置き忘れられた場合に疑問に思う1つの言語機能です。
あなたが本当にあなたのクラス階層で菱形パターンを必要とするならば、それは通常のMIと単一のAベースに委任する「AProxy」で達成することができます。
A : Base class, e.g. "Object" AProxy: Base class, constructs with other A to bind to B : derives from A C : derives from AProxy D : derives from both B and C (passing B's A to C's AProxy at construction)
これにはもう少し手間がかかります ダイアモンドMIが本当に好きな人のために そして安心して私たちの残りの部分をより扱いやすい言語機能のセットにしておきます。
COBOLを使用したことがない人にとっては、これは一般的なコード行ですが、考えていることはできません。
PIC XXX
これは私が変だと思ったものです:
C/C++では、少なくともMS C++では必要なだけセミコロンを持つことができます。
int main(void)
{
cout<<"Hello World";;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;
return 0;;;;;;;;;;;;;;;;;;;;;;;
}
_ php _ (やはり?)
最初:(unset)
型キャスト。
$a = 1;
$b = (unset)$a;
var_dump($a); // 1
var_dump($b); // NULL
使用方法: http://www.php.net/manual/en/language.types.type-juggling.php#89637
2番目:= NULL
とunset()
関数の違い.
$c = 10;
$d = &$c;
$c = NULL;
var_dump($c); // NULL
var_dump($d); // NULL
$e = 10;
$f = &$e;
unset($e);
var_dump($e); // NULL
var_dump($f); // 10 - WTF?
Cでは、
int x = 1;
int y = x++ + ++x;
printf("%d", y);
あいまいで、表示される内容はコンパイラによって異なります。コンパイラーは、++ xが評価される前、またはステートメントの終わりにx ++の新しい値を保管することができます。
PHPの場合:
<?php
$o = new stdClass;
echo count($o);
?>
..印刷1。なぜ考え出したことはありません。
Delphiは "Word"のような型キャストを気にせず、配列arr [0..65535]の外側を読みます。ここで、pos = 65535:arr[Word(pos + 10)]