2011-09-27 65 views
-1

为什么代码OCaml的:应用到的参数太多

if some_bool_var then 
begin 
    output_string some_file "some string"; (* <--- error here *) 
end 

产生“应用到太多的参数”的错误。但如果我将其更改为

if some_bool_var then output_string some_file "some string"; 

它编译得很好。

这是为什么? 谢谢。

回答

2

我很怀疑你提交的内容没有编译。我将它复制到顶层,果然我没有收到任何错误。

问题很可能不是您输入的内容,而是您输入内容后的内容。我猜你对这个特定的函数有更多的代码行,因此end在表示该命令结束后应该有一个分号。将begin ... end视为(...)...;的替代方案,作为let() = ... in的替代方案。因此,使用begin ... end不能代替使用分号。

此外,结束您的output_string呼叫beginend之间的分号是不必要的,因为该块不会继续执行更多命令。

+0

是的,我的代码是在很多行内,这个“分号魔术”让我有时会想。在我回答问题时,我遇到了另一个DID与“开始/结束”一起工作的问题,然后我将其更改为“(...)”,并且它也起作用。但是当我回到前一个单行'if'错误的范围时,'(...)'括号对我没有帮助。但是当我把'''改成'');' - 它工作。这一切都很奇怪。有时我需要品尝几种组合才能编译项目。无论如何,这是工作的解决方案。谢谢! – Slav

+0

这其实并不奇怪。当你将自己的头脑融入语言设计师所建立的典范时,这种做法很自然。请记住,所有事情都会返回一个类型(在你的'单元'中)并且需要处理。 – nlucaroni