我在这里有一个函数,用于查看元组列表,并通过获取第一个值来查找元组中的第二个值.这是迄今为止的功能:
lookup :: String -> [(String,String)] -> String
lookup _ _ [] = "Not found"
lookup x y zs = if (notFound x zs)
then "Not found"
else (head [b | (a,b) <- zs, (a==x)])
Run Code Online (Sandbox Code Playgroud)
如果没有包含给定第一个字符串的元组,则notFound函数只返回一个Bool为true.问题是,我在Hugs中遇到这种类型的错误:
ERROR "find.hs" (line 22): Type error in explicitly typed binding
*** Term : lookup
*** Type : String -> [(String,String)] -> [a] -> String
*** Does not match : String -> [(String,String)] -> String
Run Code Online (Sandbox Code Playgroud)
我认为它与虚拟的"未找到"值有关,它与生成列表中的字符串具有不同的类型,但我不确定.
我看到的所有时间的例子似乎都不是最理想的,因为它涉及连接字符串,这似乎不是jQuery.它通常看起来像这样:
$.getJSON("/Admin/GetFolderList/", function(result) {
for (var i = 0; i < result.length; i++) {
options += '<option value="' + result[i].ImageFolderID + '">' + result[i].Name + '</option>';
}
});
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
我有一个计时器,不需要同时处理其已用的事件处理程序.但处理一个Elapsed事件可能会干扰其他事件.我实施了以下解决方案,但感觉不对劲; 似乎要么我应该使用不同的计时器,要么在线程空间内使用另一个对象.计时器似乎最合适,因为我确实需要定期检查状态,但有时检查将花费比我的间隔更长的时间.这是解决这个问题的最佳方法吗?
// member variable
private static readonly object timerLock = new object();
private bool found = false;
// elsewhere
timer.Interval = TimeSpan.FromSeconds(5).TotalMilliseconds;
timer.Elapsed = Timer_OnElapsed;
timer.Start();
public void Timer_OnElapsed(object sender, ElapsedEventArgs e)
{
lock(timerLock)
{
if (!found)
{
found = LookForItWhichMightTakeALongTime();
}
}
}
Run Code Online (Sandbox Code Playgroud) 考虑以下:
@property
def name(self):
if not hasattr(self, '_name'):
# expensive calculation
self._name = 1 + 1
return self._name
Run Code Online (Sandbox Code Playgroud)
我是新手,但我认为缓存可能会被装入装饰器中.只有我找不到喜欢它的人;)
PS真正的计算不依赖于可变值
我在文本框上设置了自定义验证器.
它只验证文本框中是否有一些文本,我需要在有人点击提交按钮时一直触发.
我怎样才能做到这一点?
我正在寻找一个地方来挂钩一些代码,以便在应用程序加载完成后以编程方式创建,调整JPanel的大小和位置.
我刚开始使用Java.我正在使用带有jdk1.6.0_13的NetBeans 6.5.1.我已经使用新项目向导来创建基本的Java/Swing桌面应用程序.这是一个SingleFrameApplication,它使用带有中央主JPanel的FrameView,其中放置了所有UI元素.
我首先在FrameView构造函数中尝试了我的代码但是当我尝试根据我添加到UI中的一个设计时控件的边界矩形来安排我的JPanel时,该控件还没有完成定位和调整大小所以我得到了全部为坐标的零.
我已经验证了我的代码按照预期通过在应用程序加载后从单击事件中调用它来工作,所以我的问题是找到一种方法来了解何时完成所有内容的大小和排列.
我还尝试了来自主JPanel的componentShown事件,但后来我读到只有在显式调用setVisible时才会触发,这在正常的应用程序启动过程中显然不会发生.
任何人都可以提供一些指示吗?谢谢.
更新:
除了我在下面的答案中提到的,我还阅读了Application.ready()方法.这也是知道应用程序的UI部分何时完成它需要做的所有事情的兴趣点.从应用程序传达我的观点似乎有点混乱.
我的C#Foreach循环中的continue语句有问题.
我希望它检查datagridview中是否有空白单元格,如果是,则跳过打印值并继续检查下一个单元格.
非常感谢.
这是代码:
foreach (DataGridViewRow row in this.dataGridView1.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
if (cell.Size.IsEmpty)
{
continue;
}
MessageBox.Show(cell.Value.ToString());
}
}
Run Code Online (Sandbox Code Playgroud) 前几天这段代码正在运行.我改变了一些东西并重新运行它,现在它没有按预期工作.显然我改变的行为改变了行为,但我已经回去并恢复了所有这些改变,但它仍然无效.忽略那一点信息(开始),为什么这段代码不会在JPanel中放置一个15x15的JLabel网格?
gameBoard.setLayout(new FlowLayout());
for (int i = 0; i < 15; i++)
{
for (int j = 0; j < 15; j++)
{
JLabel tile = new JLabel("");
tile.setHorizontalAlignment(SwingConstants.CENTER);
tile.setPreferredSize(new Dimension(27, 27));
tile.setBorder(new EtchedBorder());
tile.setEnabled(false);
gameBoard.add(tile);
}
}
Run Code Online (Sandbox Code Playgroud)
gameBoard是通过NetBeans的GUI Builder定义的JPanel.它具有优选的尺寸,最大尺寸(与优选相同).水平/垂直可调整大小的选项被禁用,但是当此代码运行时,每个按钮水平延伸一行而不会断开.
如果我理解正确,FlowLayout应该在元素到达其包含元素的末尾时将其包装起来.这发生在今天之前,我真的不知道为什么这种行为停止了?