为什么不Set提供一个操作来获得一个等于另一个元素的元素?
Set<Foo> set = ...;
...
Foo foo = new Foo(1, 2, 3);
Foo bar = set.get(foo); // get the Foo element from the Set that equals foo
Run Code Online (Sandbox Code Playgroud)
我可以问一下是否Set包含一个等于的元素bar,为什么我不能得到那个元素?:(
为了澄清,该equals方法被覆盖,但它只检查其中一个字段,而不是所有字段.因此,两个Foo被认为相等的对象实际上可以具有不同的值,这就是我不能使用的原因foo.
给定一个字符c和一个数字n,如何创建一个由n次重复c组成的字符串?手动操作太麻烦了:
StringBuilder sb = new StringBuilder(n);
for (int i = 0; i < n; ++i)
{
sb.append(c);
}
String result = sb.toString();
Run Code Online (Sandbox Code Playgroud)
当然有一些静态库函数已经为我做了这个吗?
ghci> :t (>>=)
(>>=) :: Monad m => m a -> (a -> m b) -> m b
Run Code Online (Sandbox Code Playgroud)
为什么第二个论点(a -> m b)不是(m a -> m b)甚至是(a -> b)?这是什么概念有关单子需要此签名?具有替代签名的类型类是否有意义t a -> (t a -> t b) -> t b.t a -> (a -> b) -> t b?
在处理单个短路运算符时,如何对子表达式进行分组是否重要?
a && b && c && d
a && (b && (c && d))
(a && b) && (c && d)
((a && b) && c) && d
Run Code Online (Sandbox Code Playgroud)
以上表达式是否相同?
如果我使用+运算符,Haskell会自动推断类型类Num:
> let add x y = x + y
> :t add
add :: Num a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)
这是否意味着我不能拥有一个带+运算符的多个类型类?
以下函数计算我将一个数字除以另一个数字的频率:
divs n p = if (n `mod` p == 0) then 1 + divs (n `div` p) p else 0
Run Code Online (Sandbox Code Playgroud)
是否有更短的写作方式divs?
haskell ×3
java ×2
c++ ×1
character ×1
collections ×1
division ×1
equals ×1
evaluation ×1
integer ×1
monads ×1
operators ×1
overloading ×1
parentheses ×1
recursion ×1
set ×1
string ×1
typeclass ×1