小编dev*_*ium的帖子

让Eclipse自动尝试在一堆.java文件中添加导入

我知道我可以打开一个给定的文件,然后点击CTRL + SHIFT + M,它会添加与我当前光标所在的类相关联的导入.

我正在对我的项目进行一些大的重构,我决定将File类的所有引用替换Filename为我自己的类.由于系统可能包含数百个类,因此这是一个需要处理的噩梦.我已经替换Search and Replace的所有引用FileFilename的,但现在我有进口的所有的地方的问题.

除了必须打开所有文件并手动将导入添加到Filename类中同时删除旧的导入时,更简单的方法是完成我的任务File

此外,是否有一种更简单的方法来替换项目中使用过的类(本例中,File类),而不是使用另一个类Search and Replace

java eclipse refactoring

1
推荐指数
1
解决办法
2024
查看次数

有没有像List.init,但形式"int - >'T - >'T list"而不是?

我正在寻找一种方法来尝试简化以下表达式,看起来很难看,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#库中有什么东西可以帮助我清理它吗?

谢谢

.net f#

1
推荐指数
2
解决办法
158
查看次数

在F#中使用元组参数调用BCL函数

从我读过的,如果我没有弄错,似乎任何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)

.net f# functional-programming

1
推荐指数
1
解决办法
178
查看次数

尝试在Mathematica中生成随机数组时出现问题

我试图以功能的方式在Mathematica中生成一组随机数.这是我目前的尝试:

Array[Random[Real, {-10, 10}], 7]
Run Code Online (Sandbox Code Playgroud)

问题是这是打印总是相同的数字,当然,这不是我想要的.我确实理解Mathematica正在评估Random[Real, {-10,10}]一次然后总是使用相同的值.我如何规避问题,保持这种功能风格?

谢谢

functional-programming wolfram-mathematica

1
推荐指数
2
解决办法
769
查看次数

在等待异步操作在Console应用程序中结束时,如何避免使用Thread.Sleep(Int32.MaxValue)?

我有以下代码将异步下载文件到我的硬盘驱动器,向控制台喊出当前的进度并最后退出一个再见消息:

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()但如果可能的话,我想避免使用它!我能想到避免这种情况的唯一方法是生成一个新线程,然后等待它死掉,但这看起来确实很麻烦.有没有更简单的方法来完成这个?

.net c# f# asynchronous webclient

1
推荐指数
1
解决办法
859
查看次数

为什么记录类型要求您定义其成员类型?

似乎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#会发现我们使用的通用可能的根类型不太常见.

这里的明智之处在于与你所描述的相反

从一个记录移动到另一个记录时,您是否希望字段突然改变其类型? …

.net f# functional-programming record

1
推荐指数
1
解决办法
281
查看次数

寻找类似于map的F#库函数,它将传递给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它,但它将当前状态(在给定的情况下,累加器)传递给列表的每个元素.

.net f# functional-programming

1
推荐指数
1
解决办法
195
查看次数

磁盘上的.class文件是否必须遵循与Java中的限定名称相同的目录结构才能运行它?

在阅读了关于动态类加载(即从磁盘加载.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文件复制到一个临时目录中,这样我就可以对它们执行一些非常棒的操作,我将不得不在同一个临时目录中复制它们的所有脏路径,这是尴尬,充其量.

java reflection classpath classloader

1
推荐指数
1
解决办法
166
查看次数

如何处理不同联合案例数据之间的共性?

我很高兴在我的代码上使用以下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)

.net f# functional-programming

1
推荐指数
1
解决办法
126
查看次数

为什么Scala不允许在不使用"new"运算符的情况下实例化类?

我知道我们不能通过自己定义apply()伴随对象上的方法来获得这种效果,但出于所有目的,我最终在Scala代码库中看到的唯一事情就是每个人都只为每个类定义apply()方法,从而导致很多样板代码.

例如,F#将允许默认情况下没有new的对象的实例化(除了一次性用品).

这个决定有什么理由吗?

scala

1
推荐指数
1
解决办法
150
查看次数