filename='F:\__1\2\test files\file.bin';
success=java.io.File(filename).delete;
invoked from the Matlab Command Window - works,
running as a script - gives error:
"Static method or constructor invocations cannot be indexed.
Do not follow the call to the static method or constructor with any additional indexing or dot references.
MATLAB:staticMethodIndex"
Why is this so?

 채택된 답변

Yair Altman
Yair Altman 2018년 12월 30일

1 개 추천

With most Java methods, you can follow the method invocation parentheses with a dot, thereby chaining methods. For example: myJPanel.getComponent(0).getComponent(1).setVisible(false). However, such method chaining cannot be done with a constructor - it's valid syntax in Java, but Matlab's interpreter is not smart enough. In this case, simply separate the call into two parts:
filename='F:\__1\2\test files\file.bin';
jFile = java.io.File(filename);
success = jFile.delete;

댓글 수: 3

John
John 2019년 5월 16일
So, the command line parser is different than the script parser? That is surprising.
Yair Altman
Yair Altman 2019년 5월 17일
as far as I am aware, the behavior is the same in this regards in both the command window and scripts - in both cases you cannot chain methods to a Java constructor call, only to other methods.
John
John 2019년 5월 17일
Nope, they are different. I just tested:
>> ls('D:\tmp')
Figure1.JPG
Figure2.JPG
>> filename = 'D:\temp\Figure1.JPG';
>> success=java.io.File(filename).delete
success =
logical
0
Put those exact lines into a script? and get:
>> Untitled7
Error: Functions cannot be indexed using {} or . indexing.
Error in Untitled7 (line 2)
success=java.io.File(filename).delete;
Conclusion: The parser in the command line, is different from the parser, that parses scripts... That's a bit of a surprise to me, but I'm not into the details of Matlab like you are.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

태그

질문:

2018년 12월 29일

댓글:

2019년 5월 17일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by