我正在为学校制作一个成绩单项目,它正在编译好像有一个匿名的内部课程,但我没有写过任何内容.为什么javac在没有编写任何内部类(包括枚举或异常)的情况下编译内部类?有问题的文件是SemesterInfo $ 1.class,由SemesterInfo.java编译.我见过类似的问题,其中实际上有内部类,但这里没有.我从Java库中抛出一个异常(UnsupportedOperationException),但它已经在库中定义(java.lang.UnsupportedOperationException),因此不是匿名的或内部类.我的目录如下:
02/20/2016 02:03 PM 915 AddResult.class
02/15/2016 09:16 PM 848 AddResult.java
02/20/2016 02:03 PM 1,032 Console.class
02/05/2016 08:27 AM 1,315 Console.java
02/20/2016 02:03 PM 1,624 CourseInfo.class
02/19/2016 10:56 AM 9,203 CourseInfo.java
02/20/2016 02:03 PM 2,244 CourseInfoTester.class
02/17/2016 05:15 PM 2,226 CourseInfoTester.java
01/22/2016 10:55 AM 3,769 Keyboard.class
02/20/2016 02:03 PM 686 SemesterInfo$1.class
02/20/2016 02:03 PM 6,810 SemesterInfo.class
02/20/2016 01:57 PM 36,263 SemesterInfo.java
02/20/2016 02:03 PM 1,350 SemesterInfoTester.class
02/17/2016 11:59 PM 1,050 SemesterInfoTester.java
Run Code Online (Sandbox Code Playgroud)
import java.util.Scanner;
public class …
Run Code Online (Sandbox Code Playgroud) 我写了一个函数,能够清理在Haskell中处理的字数.它需要能够-
变成空格(即四十五变成四十五个)并删除所有其他非字母.我可以递归地定义它,但我真的想做一些更清洁的事情.
clean :: String -> String
clean "" = ""
clean ('-':cs) = ' ' : clean cs
clean (c:cs)
| isLetter c = c : clean cs
| otherwise = clean cs
Run Code Online (Sandbox Code Playgroud)
这导致我定义了一个自定义过滤器,并根据对此答案的注释定义了Data.List.Split的替换,因为我已经在使用Data.List.Split.
clean :: String -> String
clean = filter (\c -> isLetter c || c == ' ') . replace "-" " " . filter (/= ' ')
where
replace :: String -> String -> String -> String
replace old new …
Run Code Online (Sandbox Code Playgroud) 我正在玩数组并以不同的方式操纵它们,我偶然发现了一些非常奇怪的行为!我最初担心的是将一个数组替换为另一个可能或可能不同的数组,因为它将从一个任意长度的文件中读取.我决定玩不同的东西,看看会发生什么.我的第一次尝试是这样的:
public class RewriteArray {
public static void main(String[] args) {
String[] arr = { "1", "2", "3"};
System.out.print("Before rewrite: ");
for (String str : arr)
System.out.print(str + " ");
System.out.println();
changeArr(arr);
System.out.print("After rewrite: ");
for (String str : arr)
System.out.print(str + " ");
System.out.println();
}
private static void changeArr(String[] arr) {
arr[0] = "3";
arr[1] = "2";
arr[2] = "1";
}
}
Run Code Online (Sandbox Code Playgroud)
这完成了我的预期,通过引用对象证明了更改,并给出了输出:
Before rewrite: 1 2 3
After rewrite: 3 2 1
Run Code Online (Sandbox Code Playgroud)
然后我尝试在changeArr
方法中调整数组大小,这就是事情变得怪异的时候.
public class RewriteArray …
Run Code Online (Sandbox Code Playgroud) 我知道在Haskell中模式匹配函数是不可能的,我完全理解为什么.但是,我有两个密切相关的问题.首先,如果您想部分应用函数以供以后使用,是否有一种方法可以定义和捕获返回值(如果它是一个元组)?或者我错了,这还在尝试模仿我鼻子下的匹配功能?
例如,假设我正在尝试获取具有10的不同倍数的值的商和余数.然后,我怎么写这样的东西?
q, r :: Integral a => a -> a
(q, r) = (12345 `quotRem`)
Run Code Online (Sandbox Code Playgroud)
我在这里意识到,存在单独的功能,所以我可以这样做:
q, r :: Integral a => a -> a
q = (12345 `quot`)
r = (12345 `rem`)
Run Code Online (Sandbox Code Playgroud)
但是,这是一个非常具体的案例,并且有无限的其他函数示例返回元组,这些函数可以很好地概括.例如,一个返回列表中的平均数和赔率的函数.
evens, odds :: Integral a => [a] -> Int
(evens, odds) = (length . (filter even), length . (filter odd))
Run Code Online (Sandbox Code Playgroud)
这引出了我的第二个问题.以上在GHCi中工作得很好.
Prelude> let (evens, odds) = (length . (filter even), length . (filter odd))
Prelude> :t evens
evens :: Integral a => [a] …
Run Code Online (Sandbox Code Playgroud) haskell pattern-matching higher-order-functions higher-order-types
我在玩Haskell中的类型,偶然发现它length . sum
是有效的。是否有某种语义上的含义应该允许它起作用,或者这仅仅是类型定义的疣?我已经在下面编写了每个类型定义。
length :: Foldable t => t a -> Int
sum :: (Foldable t, Num a) => t a -> a
(.) :: (b -> c) -> (a -> b) -> a -> c
length . sum :: (Foldable t1, Foldable t2, Num (t1 a)) => t2 (t1 a) -> Int
Run Code Online (Sandbox Code Playgroud)
我能理解的唯一情况是将字符加到一个字符串中,然后就可以得到该字符串的长度。但是,sum只能采用可折叠的数字类型,因此无法使用。
有没有办法评估无限列表之间的列表差异?例如,([1..] \\ [2*n | n <- [1..]])
应该求[1,3,5,7,
... ]
.不幸的是,它似乎迫使对第一个或第二个列表或两者进行评估.有没有办法避免这个得到答案?即使使用take 5 ([1..] \\ [2*n | n <- [1..]])
不评估[1,3,5,7,9]
,这显然是正确的.注意,\\
运算符是从Data.List导入的.