F#FSI,更改工作目录

时间:2017-09-20 09:52:09

标签: f# f#-interactive

我将以下文件放在"新文件夹"桌面:

// File location: "C:\Users\my_user_name\Desktop\New folder\AddOne.fs"
// 
module internal AddOneModule

let AddOneFunction x = x + 1

我可以使用FSI F#Interactive在完整路径名上使用#load来访问此文件。

Microsoft (R) F# Interactive version 4.1
Copyright (c) Microsoft Corporation. All Rights Reserved.

For help type #help;;

> #load "C:\Users\my_user_name\Desktop\New folder\AddOne.fs";;
//[Loading C:\Users\my_user_name\Desktop\New folder\AddOne.fs]
//namespace FSI_0002
//  val AddOneFunction : x:int -> int

> open AddOneModule;;
> AddOneFunction 100;;
//  val it : int = 101

如何更改工作目录以便我可以使用相对路径访问该文件?

F# interactive:how to display/change current working directory

我尝试了类似上面帖子的内容,但FSI仍然试图在Temp文件夹中找到该文件:

(RESET FSI)

Microsoft (R) F# Interactive version 4.1
Copyright (c) Microsoft Corporation. All Rights Reserved.

For help type #help;;

> open System;;
> Environment.CurrentDirectory <- @"C:\Users\my_user_name\Desktop\New folder";;
//val it : unit = ()

> #load "AddOne.fs";;

//  #load "AddOne.fs";;
//  ^^^^^^^^^^^^^^^^^

//C:\Users\my_user_name\Desktop\New folder\stdin(3,1): error FS0078: Unable to find 
//the file 'AddOne.fs' in any of
// C:\Users\my_user_name\AppData\Local\Temp

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

Instead of changing the working directory you may achieve the desired using a trick with __SOURCE_DIRECTORY__ built-in identifier

首先,您需要在目录结构中使用某个锚点。为了便于说明,我们假设您使用的是Windows,并将此锚点作为您的用户目录,该目录由%USERPROFILE%环境变量定义。放置一个包含以下单行代码的脚本anchorfsi.fsx

#I __SOURCE_DIRECTORY__

这基本上就是你需要做的。现在,无论您使用命令行fsi拍摄fsi --load:%USERPROFILE%\anchorfsi.fsx的位置,都可以在脚本和交互式命令中使用相对路径。

通过加载.\desktop\new folder\addone.fs转到问题中的设置,以下屏幕截图演示了如何实现所需:

demo

注意输入的相对路径".\desktop\new folder\addone.fs"如何在C:\Users\gene\desktop\new folder\addone.fs工作目录上正确映射到绝对的fsi 而没有任何依赖