小编Bra*_*FRZ的帖子

不存在的隐藏Java内部类的奥秘

我正在为学校制作一个成绩单项目,它正在编译好像有一个匿名的内部课程,但我没有写过任何内容.为什么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)

SemesterInfo.java

import java.util.Scanner;

public class …
Run Code Online (Sandbox Code Playgroud)

java anonymous-inner-class javac

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

如何在Haskell中替换多个案例?

我写了一个函数,能够清理在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)

haskell replace

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

为什么不能通过Java中的引用来调整数组的大小?

我正在玩数组并以不同的方式操纵它们,我偶然发现了一些非常奇怪的行为!我最初担心的是将一个数组替换为另一个可能或可能不同的数组,因为它将从一个任意长度的文件中读取.我决定玩不同的东西,看看会发生什么.我的第一次尝试是这样的:

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)

java arrays pass-by-reference

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

有没有办法在Haskell中捕获高阶函数的元组?

我知道在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

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

组成“和长”是什么意思?

我在玩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只能采用可折叠的数字类型,因此无法使用。

haskell types composition

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

我如何懒惰地评估Haskell中的列表差异?

有没有办法评估无限列表之间的列表差异?例如,([1..] \\ [2*n | n <- [1..]])应该求[1,3,5,7,... ].不幸的是,它似乎迫使对第一个或第二个列表或两者进行评估.有没有办法避免这个得到答案?即使使用take 5 ([1..] \\ [2*n | n <- [1..]])不评估[1,3,5,7,9],这显然是正确的.注意,\\运算符是从Data.List导入的.

haskell list lazy-evaluation

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