为什么无提示地忽略了Julia函数名(不带参数)?

时间:2019-02-08 06:52:26

标签: julia

我有一个定义函数的脚本,后来打算调用该函数,但忘了加上括号,就像这样:

function myfunc()
    println("inside myfunc")
end
myfunc  # This line is silently ignored. The function isn't invoked and there's no error message.

过了一会儿,我确实发现我缺少括号,但是由于Julia没有给我一个错误,我想知道那行实际上在做什么?我以为它必须使用myfunc语句来做某事,但我对Julia的了解还不足以了解正在发生的事情。

我尝试了--depwarn=yes,但没有看到julia命令行开关来提高警告级别或详细程度。请让我知道是否存在。

对于背景上下文,出现这种情况的原因是我试图将Bash脚本转换为Julia,并且在很多位置都定义了无参数函数然后将其调用,而在Bash中则没有在函数名称后需要括号才能调用它。

该脚本是从命令行(julia stub.jl)运行的,我在macOS上使用的是Julia 1.0.3。

2 个答案:

答案 0 :(得分:2)

它不会默默地忽略该功能。在交互式会话中调用myfunc将向您显示发生了什么:调用将函数对象返回到控制台,因此调用了show的{​​{1}}方法,显示了当前定义了多少个方法在您的工作空间中使用该功能。

Function

由于您是在脚本中调用此函数,因此julia> function myfunc() println("inside myfunc") end myfunc (generic function with 1 method) julia> myfunc myfunc (generic function with 1 method) 不会被调用,因此看不到任何结果。但这没有错误,因为语法是有效的。 感谢DNF对它在脚本中的有用评论。

答案 1 :(得分:2)

它什么都不做。

与c中一样,表达式具有一个值:c中的表达式_ a = 1 + 1; _的值为_ 2 _在c中,这刚好脱离了解析器:他们希望能够对_ a == b _

这样的表达式求值

在Julia中,这是设计一种语言的结果,将您编写的代码作为该语言的数据对象进行处理。在Julia中,表达式“ a = 1 + 1”的值为“ a = 1 + 1”。

在c中,事实

Fatal error: Uncaught exception 'Exception' with message 'Invalid cell coordinate LIST1!B2' 

in  /nfsmnt/hosting2_1/9/d/9d99e7c0-d532-400a-909f-9c348da3c869/isir.info/web/tp_libs/phpexcel/PHPExcel/Cell.php:508

Stack trace: 
#0 /tp_libs/phpexcel/PHPExcel/Cell.php(545): PHPExcel_Cell::coordinateFromString('LIST1!B2') 
#1 /tp_libs/phpexcel/PHPExcel/Writer/Excel2007/Workbook.php(356): PHPExcel_Cell::absoluteCoordinate('LIST1!B2') 
#2 /tp_libs/phpexcel/PHPExcel/Writer/Excel2007/Workbook.php(277): PHPExcel_Writer_Excel2007_Workbook->_writeDefinedNameForAutofilter(Object(PHPExcel_Shared_XMLWriter), Object(PHPExcel_Worksheet), 0) 
#3 /tp_libs/phpexcel/PHPExcel/Writer/Excel2007/Workbook.php(82): PHPExcel_Writer_Excel2007_Workbook->_writeDefinedNames( in /nfsmnt/hosting2_1/9/d/9d99e7c0-d532-400a-909f-9c348da3c869/isir.info/web/tp_libs/phpexcel/PHPExcel/Cell.php on line 508

是可接受的代码行,这意味着,

  a=1+1;

也是可接受的代码行。在Julia中也是如此:编译器希望在那里看到一个数据值:您输入的任何数据值都可以接受:即使例如代表函数返回的计算值的数据值:

  a;

或代表函数对象本身的值:

 myfunc()

与c一样,数据值在代码中无处不在这一事实仅表明语法允许代码在代码中无处不在,并且编译器对代码中无处不在的数据值不执行任何操作。