我有这么短的代码
Public n As Integer
Public Sub Foo()
For i = 0 To 4
MyModule.n = MyModule.n + 1
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
它在名为的模块中定义MyModule.此代码按预期工作:第一次执行后'MyModule.n'的值为5.执行第二次后,它的值为10,依此类推.
当我扩展代码,添加一个CommandButton并将其放在工作表上时,全局变量MyModule.n在每次新调用时都会丢失它的值Foo:
Public n As Integer
Public Sub Foo()
Dim btn As OLEObject
For i = 0 To 4
Set btn = Worksheets("Aufträge").OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Left:=122, Top:=321, Width:=30, Height:=30)
MyModule.n = MyModule.n + 1
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
代码似乎有效,因为命令按钮已创建并正确放置.为什么在执行第二个代码片段时全局变量会重置?
此外,我不能在第二个代码片段中的For-Loop之后或之内放置一个断点.我收到了消息Can't enter break mode at this time.
...或者是否可以在Neo4j中创建一个与自身有关系的节点(一个简单的循环节点)?
如果是这样,相应的Cypher查询是什么?
我只想在某个通道阻塞等待数据到来时继续执行(阻塞通道是工作例程的一部分,应该并行运行)。
喜欢:
func foo(c chan bool) {
go start_blocking(c)
// only come here, when channel c actually blocks!
}
func start_blocking(c chan bool) {
<-c
}
Run Code Online (Sandbox Code Playgroud)
如何实现这一目标?
目的:
通道正在等待稍后的数据到来,并且在主执行继续之前它应该在后台准备好。
我一般在一个班级中宣称一个私人领域的土地以及一个从外面进入这个领域的公共财产(到目前为止没有什么壮观的笑容):
private bool doILookGood;
public bool DoILookGood
{
get { return doILookGood; }
set { doILookGood = value; }
}
Run Code Online (Sandbox Code Playgroud)
现在我想知道是否有一种优雅而有效的方式来评论这种情况,而无需两次写同样的评论.换句话说,我希望保留IDE在使用工具提示进行鼠标悬停时向我显示变量注释的功能.
到目前为止,我正在以这种方式发表评论:
/// <summary>
/// This i always true.
/// </summary>
private bool doILookGood;
/// <summary>
/// This i always true.
/// </summary>
public bool DoILookGood
{
get { return doILookGood; }
set { doILookGood = value; }
}
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
/// <summary>
/// This i always true.
/// </summary>
private bool doILookGood;
/// <summary cref="doILookGood" />
public bool …Run Code Online (Sandbox Code Playgroud) 我现在已经研究过这个问题了一段时间,我觉得普通断点的位置会大大影响程序的运行时行为.
我在这里讲的是条件断点,例如当设置断点条件时,var == null这种情况永远不会发生但是当我删除断点var == null时经常发生的情况.
可能是吗?
附录:
我的代码是多线程的,因此很难发布代码以重现错误.基本上我有两个线程.一个是将队列中的项目排队,另一个是从队列中永久地取消项目.在下面的代码中,我遇到的情况是第一个线程永远不会将空项排队,但由于某种原因,它们正在进入队列.这让我插入if语句以防止NullReferenceException.虽然作为一个临时的解决方法,我的程序确实从那时开始运行.然后我感兴趣的是null项从队列中出队的频率,并且我在if语句的行中放置了一个条件断点inv == null.现在的效果是,当存在断点时,inv似乎永远不会为null,并且当没有断点时,inv似乎通常为null.
public void _dequeue () {
while (!Signals.TerminateSignal.WaitOne(0, false)) {
if (Signals.DequeueSignal.WaitOne()) {
lock (Queue) {
IInvocation inv;
Queue.TryDequeue(out inv);
// Conditional Breakpoint
if (inv != null)
inv.Invoke();
_poolHooks[PoolIndex].DecrementWaiting();
_poolHooks[PoolIndex].IncrementPending();
if (Queue.Count == 0) Signals.DequeueSignal.Reset();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题再次开始,当队列中的一些项目开始是空项目,虽然我从来没有添加空项目.即使是因为这个原因,我已经放置了一行,当有空的东西时抛出异常.永远不会抛出异常,但我的队列中仍然有空项目,我不知道为什么.
public static void EnqueueInvocation (int poolIndex, IInvocation inv ) {
if (inv == null) throw new Exception("Red Alert");
lock (_deqThreads[poolIndex].Queue) {
_poolHooks[poolIndex].IncrementWaiting(); …Run Code Online (Sandbox Code Playgroud) 在Java中,哪些代码在多个线程之间共享,哪些代码被复制以用于一个特定的线程?
如果考虑下面的片段,那就太精确了
public void foo () {
int a = 0;
a++;
}
Run Code Online (Sandbox Code Playgroud)
由多个线程同时执行,每个线程是否拥有自己的变量副本,a还是在线程之间共享?
也许是一个相当深入的问题,但是有人知道为什么会这样
Java语言规范 - Java SE 8 Edition(2014-03-03)
它根据生产规则和终端定义了Java 8的正式无上下文语法,并不是所有已定义的规则都可以访问?
规范描述了许多规则,如
IfThenStatement:
if(Expression)Statement
要么
AssertStatement:
断言表达式;
断言表达式:表达;
这一切都很有意义.
但奇怪的是,一些定义的规则是其他人无法达到的,例如重要的规则
类型:
PrimitiveType
ReferenceType
总的来说,我计算了以下两条规则:其他人无法访问的规则:
如何定义具有无法访问规则的完整Java 8 CFG?
我想知道它们之间有什么区别
#define MYSYMBOL
#if MYSYMBOL
public void foo () {
// ...
}
#endif
Run Code Online (Sandbox Code Playgroud)
和
#define MYSYMBOL
[Conditional("MYSYMBOL")]
public void foo () {
// ...
}
Run Code Online (Sandbox Code Playgroud)
?
也许这是显而易见的,但如果有人能给我一个正确方向的提示,我会很感激:)
在Java中有一种方法可以强制转换以下内容:
ArrayList<IMyType> list
成
ArrayList<MyType>
如果
MyType implements IMyType
?
我想知道用什么代码将double []数组转换为string []数组