我知道我可以打开一个给定的文件,然后点击CTRL + SHIFT + M,它会添加与我当前光标所在的类相关联的导入.
我正在对我的项目进行一些大的重构,我决定将File类的所有引用替换Filename为我自己的类.由于系统可能包含数百个类,因此这是一个需要处理的噩梦.我已经替换Search and Replace的所有引用File来Filename的,但现在我有进口的所有的地方的问题.
除了必须打开所有文件并手动将导入添加到Filename类中同时删除旧的导入时,更简单的方法是完成我的任务File?
此外,是否有一种更简单的方法来替换项目中使用过的类(本例中,File类),而不是使用另一个类Search and Replace?
我正在寻找一种方法来尝试简化以下表达式,看起来很难看,IMO:
List.map (fun _ -> generateIndividual()) [1..popSize]
Run Code Online (Sandbox Code Playgroud)
我找到了List.init,但它仍然不是我想要的:
List.init popSize (fun x -> generateIndividual())
Run Code Online (Sandbox Code Playgroud)
它是完美的,它不是lambda表达式的参数.这样做很完美:
List.init popSize generateIndividual()
Run Code Online (Sandbox Code Playgroud)
F#库中有什么东西可以帮助我清理它吗?
谢谢
从我读过的,如果我没有弄错,似乎任何BCL方法都将其参数作为F#中的元组接收.所以我想知道是否而不是
let rndNumber= rng.Next(-10, 10)
Run Code Online (Sandbox Code Playgroud)
我可以有类似的东西
let range = (-10, 10)
let rndNumber = rng.Next range
Run Code Online (Sandbox Code Playgroud)
完整代码如下:
open System
let rng = new Random()
let range = (-10, 10)
let rndNumber = rng.Next range
Run Code Online (Sandbox Code Playgroud)
而我得到的错误是
This expression was expected to have type
int
but here has type
int * int
Run Code Online (Sandbox Code Playgroud) 我试图以功能的方式在Mathematica中生成一组随机数.这是我目前的尝试:
Array[Random[Real, {-10, 10}], 7]
Run Code Online (Sandbox Code Playgroud)
问题是这是打印总是相同的数字,当然,这不是我想要的.我确实理解Mathematica正在评估Random[Real, {-10,10}]一次然后总是使用相同的值.我如何规避问题,保持这种功能风格?
谢谢
我有以下代码将异步下载文件到我的硬盘驱动器,向控制台喊出当前的进度并最后退出一个再见消息:
webClient.DownloadProgressChanged.Add(fun args ->
if (currentPercentage < args.ProgressPercentage) then
Console.WriteLine(args.ProgressPercentage.ToString() + "%")
currentPercentage <- args.ProgressPercentage
)
webClient.DownloadFileCompleted.Add(fun args ->
Console.WriteLine("Download finished!")
Environment.Exit 0
)
webClient.DownloadFileAsync(new Uri(url_to_download), file_name)
Thread.Sleep Int32.MaxValue
Run Code Online (Sandbox Code Playgroud)
然而,我想知道是否有更优雅的方式来实现这一点,而不必诉诸于主线程中的"永远沉睡",让程序尽头结束Environment.Exit().我对使用没有任何偏见,Environment.Exit()但如果可能的话,我想避免使用它!我能想到避免这种情况的唯一方法是生成一个新线程,然后等待它死掉,但这看起来确实很麻烦.有没有更简单的方法来完成这个?
似乎Record类型要求您声明其成员类型:
type Point = { X:int; Y:int }
Run Code Online (Sandbox Code Playgroud)
它背后的理由是什么(或可能是什么)?
似乎在F#中你可以(几乎)总是逃脱而不必在编码时定义类型.这让我觉得这个限制可能有很强的理论基础.是这样的吗?
我确实理解你的关注点,但在我看来错误的推理.我们来看一个例子:
让我们假设F#允许我们定义无类型成员:
type Point = { X; Y; }
Run Code Online (Sandbox Code Playgroud)
你的推理围绕这样的事实,并且可以在我们的代码中找到以下内容:
let a = { X=1; y=2 } //(1)
let b = { X="1"; y="2" } //(2)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,编译器将无法选择,而是(隐式地)定义Point为
type Point = { X:object; Y:object }
Run Code Online (Sandbox Code Playgroud)
现在,您可能不仅创建了记录,还使用了它们.话虽如此,您的代码中可能会有一些地方尝试将Point的成员视为整数:
let z = a.X + 2 //ERROR. goes against what is seen in (2)
Run Code Online (Sandbox Code Playgroud)
和其他你将它们视为字符串的人:
let w = A.X + "abc" //ERROR. goes against what is seen in (1)
Run Code Online (Sandbox Code Playgroud)
两者都会标记错误,所以即使有人会尝试为记录成员使用互不兼容的类型,也不能!它们是否会以某种方式兼容,而F#会发现我们使用的通用可能的根类型不太常见.
这里的明智之处在于与你所描述的相反
从一个记录移动到另一个记录时,您是否希望字段突然改变其类型? …
我想知道F#库中是否有类似于这个的功能?
let map_acc (f:int->int) (list:int list) =
let rec map_acc' f acc = function
| [] -> []
| h::t -> (f (h+acc))::(map_acc' f (h+acc) t)
map_acc' f 0 list
Run Code Online (Sandbox Code Playgroud)
用法:
let xxx = map_acc id [1..10]
val xxx : int list = [1; 3; 6; 10; 15; 21; 28; 36; 45; 55]
Run Code Online (Sandbox Code Playgroud)
它的目的非常类似于map它,但它将当前状态(在给定的情况下,累加器)传递给列表的每个元素.
在阅读了关于动态类加载(即从磁盘加载.class文件)之后,我有点担心.
假设我有一个MyClass.class包含该类的文件a.b.c.MyClass.假设我现在决定将文件移动到C:\(我在Windows中的根文件夹),我想动态加载这个类.这有可能吗?根据我的理解,似乎MyClass"路径总是必须是形式的*a/b/c.MyClass.
因此,以下代码似乎不起作用:
URL[] urls = new URL[] { new File("C:\\").toURL() };
URLClassLoader classLoader = new URLClassLoader(urls);
Class<?> targetClass = classLoader.loadClass("a.b.c.MyClass");
Run Code Online (Sandbox Code Playgroud)
强迫我们将.class文件放在反映其完整内部名称的目录结构中是疯狂的,IMO.我错过了什么吗?
这个事实的一个可能的暗示是,如果我决定将几个.class文件复制到一个临时目录中,这样我就可以对它们执行一些非常棒的操作,我将不得不在同一个临时目录中复制它们的所有脏路径,这是尴尬,充其量.
我很高兴在我的代码上使用以下DU
type Token =
| LET of Position
| WS of Position
| IDENTIFIER of Position * string
| EQ of Position
| NEWLINE of Position
| PLUS of Position
| MINUS of Position
| TIMES of Position
| DIV of Position
| OPEN_BRACE of Position
| CLOSE_BRACE of Position
| INT32 of Position * int32
| FLOAT32 of Position * float32
Run Code Online (Sandbox Code Playgroud)
直到我遇到需要Position从通用token变量中提取出来的情况.根据我的理解,除了直接将其重构为类似的东西之外,没有其他选择
type TokenType =
| LET
| WS
| IDENTIFIER of string
| EQ …Run Code Online (Sandbox Code Playgroud) 我知道我们不能通过自己定义apply()伴随对象上的方法来获得这种效果,但出于所有目的,我最终在Scala代码库中看到的唯一事情就是每个人都只为每个类定义apply()方法,从而导致很多样板代码.
例如,F#将允许默认情况下没有new的对象的实例化(除了一次性用品).
这个决定有什么理由吗?
.net ×6
f# ×6
java ×2
asynchronous ×1
c# ×1
classloader ×1
classpath ×1
eclipse ×1
record ×1
refactoring ×1
reflection ×1
scala ×1
webclient ×1