vbのPGを調査・解析する簡単なスクリプトを作っていました。
vb自体は詳しくなかったのですが、メソッド呼び出しと配列の参照が同じ書式であることに気がつきました。
test(1) 'testという配列の2個目の要素の参照と、testというメソッドを引数1で呼び出すの両方の意味で使えてしまう。
そこで配列と同じメソッド名を定義すればエラーになるのかと思ったのですが、エラーになりませんでした。
public class compiler shared function Main as integer Dim test = New Integer() {1, 2, 4, 8} Console.WriteLine(test(1))'2が出力される(配列が優先?) 'test(1) return 0 End function shared function test(ByVal num As Integer) Console.WriteLine ("test") End function end class
実行はpaisa.ioのvbを使いました
ただし上記プログラムは5行目'test(1)
のコメントアウトを外すとエラーになります。
Visual Basic.Net Compiler version 0.0.0.5943 (Mono 4.0.1 - tarball) Copyright (C) 2004-2010 Rolf Bjarne Kvinge. All rights reserved. /workspace/Main.vb (4,13) : warning VBNC42020: Variable declaration without an 'As' clause; type of Object assumed. /workspace/Main.vb (10,18) : warning VBNC42021: Function without an 'As' clause; return type of Object assumed. /workspace/Main.vb (6,11) : error VBNC99999: Internal compiler error close to this location vbnc : Command line : error VBNC99999: Unexpected error: Value cannot be null. Parameter name: value at Mono.Cecil.Cil.Instruction.Create (OpCode opcode, System.String value) <0x40266630 + 0x0013d> in <filename unknown>:0 at Mono.Cecil.Cil.ILProcessor.Create (OpCode opcode, System.String value) <0x402665f0 + 0x00022> in <filename unknown>:0 at Mono.Cecil.Cil.ILProcessor.Emit (OpCode opcode, System.String value) <0x402665a0 + 0x00026> in <filename unknown>:0 at vbnc.EmitLog.Emit (OpCode opcode, System.String str) <0x40266540 + 0x00042> in <filename unknown>:0 at vbnc.Emitter.EmitLoadValue (vbnc.EmitInfo Info, System.String Value) <0x402664a0 + 0x00091> in <filename unknown>:0 at vbnc.LateBoundAccessToExpression.EmitLateCall (vbnc.EmitInfo Info, vbnc.LateBoundAccessClassification LateBoundAccess) <0x40266030 + 0x0024d> in <filename unknown>:0 at vbnc.InvocationOrIndexExpression.GenerateCodeInternal (vbnc.EmitInfo Info) <0x4025fcb0 + 0x00236> in <filename unknown>:0 at vbnc.Expression.GenerateCode (vbnc.EmitInfo Info) <0x40249080 + 0x00297> in <filename unknown>:0 Compilation took 00:00:00.6206770
配列とメソッド名の扱いについて調べたところ、
この事象を解説しているドキュメントなど見つかりませんでした。
これは一体何が起こっているのでしょうか?

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/24 16:51 編集
2018/03/24 17:04
2018/03/24 17:08
2018/03/24 17:10
2018/03/24 17:24 編集
2018/03/24 17:24
2018/03/24 17:40 編集