我正在运行Ubuntu 18.04 LTS
,使用的是Mono版本5.18.0.2140
,如果我将netcore
与VS Code一起使用,我的代码将无法在mono下编译。但是,我需要为该分配使用单声道,所以我不确定出什么问题了。我正在使用的命令是:
fsharpc --nologo chessApp.fsx && mono chessApp.exe
错误发生在代码的这一部分(from this line and down,底部是完整要点):
let playerOne = Chess.Human(Color.White) // Here
let playerTwo = Chess.Human(Color.Black) // Here
let game = new Chess.Game()
game.run(playerOne, playerTwo, board, pieces) // and here
我得到的错误如下:
chessApp.fsx(28,17): The object constructor 'Human' takes 0 argument(s) but is here given 1. The requried signature is 'new : unit -> Human'.
chessApp.fsx(29,17): The object constructor 'Human' takes 0 argument(s) but is here given 1. The requried signature is 'new : unit -> Human'.
chessApp.fsx(31,1): This value is not a function and cannot be applied.
使用VS Code我没有得到这些错误。它在那里工作。例如,Human
确实接受了1个参数VS Code上的netcore识别出了这一点,但是mono没有。为了不使这个问题超出需要的时间,我已将代码上传到要旨right here。
答案 0 :(得分:2)
我尝试通过在Windows上从命令行运行编译器来重现此问题。 fsx
源文件中有两个小错误。首先,您打开了错误的名称空间:
#r "chess.dll"
#r "pieces.dll"
open Chess
open Pieces // <- This should be open 'Piece'
第二,pieces
集合必须是列表,而不是数组:
let pieces =
[ king (White) :> chessPiece
rook (White) :> chessPiece
king (Black) :> chessPiece
rook (Black) :> chessPiece ]
通过这两个更改,我能够编译所有内容:
fsharpc --target:library chess.fs
fsharpc --target:library -r:chess.dll pieces.fs
fsharpc chessApp.fsx
请注意,您需要--target:library
来表明这应该构建一个dll
文件,还需要-r:chess.dll
来构建第二个文件,以告知它需要引用第一个{{1} }。
如果使用dll
将其他两个文件引用为源文件,而不是使用#load
作为编译文件,则容易得多:
#r
然后,您只需运行#load "chess.fs"
#load "pieces.fs"
就可以编译整个程序,您将获得一个独立的可执行文件。