我在Ubuntu 12.10中安装了eclipse.工作了几天后,我创建了我的第一个CDT C++项目,并在那里呆了一段时间.现在,当我回到我的Java项目时,我发现当我输入变量名并按"."时.没有出现.
但是,我可以通过选择"编辑" - >"内容辅助" - >"Java提议"来返回上下文菜单.问题是它根本不方便.单击"默认提案"时,将显示带有"无默认提议"的空上下文菜单.我还确认正在激活正确的"Java"方面.
如何返回原始状态(默认情况下Java提示菜单)?
Eclipse Platform版本为3.7.0.I20120502-2000
这个问题显示了一个实例定义(,) a b,其中a是一个实例Monoid.
但是,我不知道如何编写类似的东西(,) a b,并且b是一个实例Monoid?只要我能写出定义,我基本上可以这样做:
instance Monoid b => Monad ((,) ???) where
return a = (a,mempty)
~(a,b) >>= f = let (c,b1) in f a in (c,b `mappend` b1)
Run Code Online (Sandbox Code Playgroud)
所以问题是如何写这个???部分?
UPDATE
实际上这个问题是一个更通用的问题的特例:是否有可能编写类型类的实例,这些类作用于最终没有出现的某些类型?在我的例子中,类型构造函数是(,) a b,我想让它成为Monad awhere a不是最后一个类型参数的实例.
今天我从eclipse markerplace安装了Maven插件(m2e).现在我想从github签出一个项目."从SCM中检出Maven项目"对话框显示"SCM类型"下拉列表,因此我单击了一个链接以安装git的连接器.
我在另一个对话框中找到了连接器"m2e-egit",所以我检查了它,单击Finish.它失败并显示以下消息:
Operation details
Cannot complete the install because one or more required items could not be found.
Software being installed: Maven SCM Handler for EGit 0.14.0.201207041402 (org.sonatype.m2e.egit.feature.feature.group 0.14.0.201207041402)
Missing requirement: Maven SCM Handler for EGit 0.14.0.201207041402 (org.sonatype.m2e.egit 0.14.0.201207041402) requires 'bundle org.eclipse.egit.core [1.0.0,3.0.0)' but it could not be found
Cannot satisfy dependency:
From: Maven SCM Handler for EGit 0.14.0.201207041402 (org.sonatype.m2e.egit.feature.feature.group 0.14.0.201207041402)
To: org.sonatype.m2e.egit [0.14.0.201207041402]
Run Code Online (Sandbox Code Playgroud)
它声称我没有安装EGit,但我可以确认我已经从"关于Eclipse功能"对话框安装了Eclipse EGit 3.1.0.20131021548-r.
我能找到的其他信息:
Eclipse:Kelper Service Release 1 - build id 20130919-0819
Eclipse.org - m2e:1.4.0.20130601-0317 …
在大多数支持可变变量的编程语言中,可以轻松实现类似这样的Java示例:
interface Accepter<T> {
void accept(T t);
}
<T> T getFromDoubleAccepter(Accepter<Accepter<T>> acc){
final List<T> l = new ArrayList<T>();
acc.accept(new Accepter<T>(){
@Override
public void accept(T t) {
l.add(t);
}
});
return l.get(0); //Not being called? Exception!
}
Run Code Online (Sandbox Code Playgroud)
对于那些不了解Java的人来说,上面的代码收到的东西可以提供一个带有一个参数的函数,它应该将这个参数作为最终结果.
这不像callCC:没有控制流交替.仅涉及内部函数的参数.
我认为Haskell中的等效类型签名应该是
getFromDoubleAccepter :: (forall b. (a -> b) -> b) -> a
Run Code Online (Sandbox Code Playgroud)
所以,如果有人可以为你(a -> b) -> b选择的某种类型提供功能,那么他必须已经拥有了a.所以你的工作就是给他们一个"回调",而不是保留他们发送给你的任何东西,一旦他们回到你身边,就把这个价值归还给你的来电者.
但我不知道如何实现这一点.我能想到几种可能的解决方案.虽然我不知道它们中的每一个是如何工作的,但我可以根据预期的困难对它们进行评级和排序:
Cont或者ContTmonad.我认为这是最简单的.
RWS monad或类似的.
任何其他单子.纯粹的 monad就像Maybe我认为更难.
仅使用标准的 …
我很惊讶反应式扩展CompositeDisposable类未能通过以下测试
[Test]
public void TestDisposable()
{
var ds = new List<IDisposable>();
int[] a = { 1, 2, 3 };
using (new CompositeDisposable(ds))
{
ds.Add(Disposable.Create(() => a[0] = 3));
ds.Add(Disposable.Create(() => a[2] = 1));
}
Assert.That(a[0],Is.EqualTo(3)); //Failed here
Assert.That(a[1], Is.EqualTo(2));
Assert.That(a[2], Is.EqualTo(1));
}
Run Code Online (Sandbox Code Playgroud)
所以这意味着如果我CompositeDisposable通过给定 a创建 aIEnumerable<IDisposable>它实际上迭代它的所有元素,而不是将其推迟到Dispose被调用者。
这在其他情况下可能很有用,但在我的情况下却很不方便。是否还有其他课程可以更轻松地完成上述任务?