在 try-catch 中使用 :colorscheme
作为 Randy 已完成 如果您只想加载它(如果存在)并执行其他操作,则可能就足够了。如果您对 else 部分不感兴趣,可以使用简单的 :silent! colorcheme
就足够了。
否则, globpath()
是要走的路。然后,如果您确实愿意,可以检查使用 filereadable()
返回的每个路径。
" {rtp}/autoload/has.vim
function! has#colorscheme(name) abort
let pat = 'colors/'.a:name.'.vim'
return !empty(globpath(&rtp, pat))
endfunction
" .vimrc
if has#colorscheme('desert')
...
编辑: fileread($HOME.'/.vim/colors/'.name.'.vim')
可能看起来很简单,而且绝对有吸引力,但如果我们正在寻找的颜色方案,这还不够因为是在别处。通常,如果它已通过插件管理器安装在另一个目录中。在这种情况下,唯一可靠的方法是检查 vim 'runtimepath '
(又名'rtp'
)。因此globpath()
。请注意,:colorscheme name
命令在 {rtp}/colors/{name}.vim
中搜索。
该语言是否支持面向对象对于您的目的来说并不重要。毕竟,PHP 支持对象,而且您似乎用得很好。
就我个人而言,我建议从 Java 或 C# 开始。这两种语言的社区非常庞大,并且有大量在线教程可以帮助您入门。
使用 Visual Studio Express 开始编写 C# 非常容易。还有一个很好的hello world 教程。
另外,如果您坚持使用 C#,则可以利用 WMI 将使您能够完成该项目所需的一切(以及更多)。
最后,大多数 Windows 计算机将能够运行您的应用程序,而无需安装任何额外的东西,并且 Visual Studio 会在构建过程中为您构建 .exe。
但我在想..尝试立即插入然后捕获异常会更有效吗?
如果异常很少发生(通常是这种情况),这确实是一种更有效且更简单的方法。
如果发生 FK 违规的可能性很高,那么预插入检查(假设它们不访问数据库)将节省到数据库的往返行程,因此会更有效。
回复:找出失败的原因。供应商异常通常包含一些有关触发异常的约束的信息。您应该查看供应商异常的字段和方法。
在 .NET 框架中,程序集是
编译后的代码库用于
部署、版本控制和安全性。有两种类型:进程
程序集 (EXE) 和库
程序集 (DLL)。
工艺装配
代表一个将使用的过程
库程序集中定义的类。.NET 程序集包含 CIL 中的代码,
通常是从 CLI 生成的
语言,然后编译成
CLR 运行时的机器语言
即时编译器。
- 维基百科
如果您的资源只是复制到同一个文件夹中,那么它不是您的资源的一部分装配。
但如果它被编译成 .dll 或 .exe,它就是程序集的一部分。
对于大多数 .NET Framework 应用程序,
您找到组成
应用程序中的应用程序
目录,在子目录中
应用程序的目录,或在
全局程序集缓存(如果程序集
是共享的)。 -MSDN
最好使用“with”关键字重写它。 “With”将自动关闭游标(这很重要,因为它是非托管资源)。好处是它也会在出现异常时关闭游标。
from contextlib import closing
import MySQLdb
''' At the beginning you open a DB connection. Particular moment when
you open connection depends from your approach:
- it can be inside the same function where you work with cursors
- in the class constructor
- etc
'''
db = MySQLdb.connect("host", "user", "pass", "database")
with closing(db.cursor()) as cur:
cur.execute("somestuff")
results = cur.fetchall()
# do stuff with results
cur.execute("insert operation")
# call commit if you do INSERT, UPDATE or DELETE operations
db.commit()
cur.execute("someotherstuff")
results2 = cur.fetchone()
# do stuff with results2
# at some point when you decided that you do not need
# the open connection anymore you close it
db.close()
如果您使用 PHP 的内置会话功能。您可以使用 $session_id = session_id(); 获取会话的 ID
当用户登录时,您可以获取它生成的会话 ID,并将其存储到该用户帐户下的数据库中。然后在每个页面上检查当前会话 ID 是否与该用户数据库中存储的会话 ID 匹配(如果不匹配,则终止当前会话并将其重定向到登录页面)。
他们登录所用的每台设备上的会话 ID 都不同。
这有道理吗?
您好,@anu 发布的答案是正确的,但它不会完全按要求工作。通过对 child_open() 函数进行轻微更改,它可以正常工作。
<html>
<head>
<script type="text/javascript">
var popupWindow=null;
function child_open()
{
if(popupWindow && !popupWindow.closed)
popupWindow.focus();
else
popupWindow =window.open('new.jsp',"_blank","directories=no, status=no, menubar=no, scrollbars=yes, resizable=no,width=600, height=280,top=200,left=200");
}
function parent_disable() {
if(popupWindow && !popupWindow.closed)
popupWindow.focus();
}
</script>
</head>
<body onFocus="parent_disable();" onclick="parent_disable();">
<a href="javascript:child_open()">Click me</a>
</body>
</html>
我猜这是由于日期格式不匹配造成的。请验证 C#
和 SQL Server
中参数的日期格式是否相同。如果不匹配,您可以在存储过程本身中转换格式。
只需将字符串的初始子字符串从最短到最长的反向附加到字符串中,直到得到回文。例如,对于“acbab”,尝试附加“a”,它产生“acbaba”,它不是回文,然后尝试附加“ac”反向,产生“acbabca”,它是回文。
更新:请注意,您不必实际执行附加操作。您知道子字符串匹配,因为您刚刚反转了它。因此,您所要做的就是检查字符串的其余部分是否是回文,如果是,则附加子字符串的反向内容。这是皮蒂瓦尔象征性地写下的内容,所以他可能应该得到答案。示例:对于“acbab”,找到最长的回文后缀;那是“bab”。然后反向附加余数“ac”:ac bab ca。
别打扰。它不兼容。它很混乱并且容易出错。早在这个功能存在之前,c++ 就有更容易管理的解决方案。你要在结构的末尾添加什么?通常,您只需使用 std::vector、std::array 或固定大小数组之类的东西。
更新
我想要一个音符开始时间 (uint64_t) 列表,并遍历它们以查看正在播放的音符(如果有)。我打算向结构添加一个计数变量来跟踪灵活数组中有多少项。
好的,如果你有固定的复调音乐,那么固定大小的数组应该没问题。在大多数 iOS 合成器中,你不需要多个这样的数组。当然,“即将发布的笔记”数组大小可能会根据应用程序合成器的不同而有所不同?采样器?定序器?实时输入?
template <size_t NumNotes_>
class t_note_start_times {
public:
static const size_t NumNotes = NumNotes_;
typedef uint64_t t_timestamp;
/*...*/
const t_timestamp& timestampAt(const size_t& idx) const {
assert(this->d_numFutureNotes <= NumNotes);
assert(idx < NumNotes);
assert(idx < this->d_numFutureNotes);
return this->d_startTimes[idx];
}
private:
t_timestamp d_presentTime;
size_t d_numFutureNotes; // presumably, this will be the number of active notes,
// and values will be compacted to [0...d_numFutureNotes)
t_timestamp d_startTimes[NumNotes];
};
// in use
const size_t Polyphony = 16;
t_note_start_times<Polyphony> startTimes;
startTimes.addNoteAtTime(noteTimestamp); // defined in the '...' ;)
startTimes.timestampAt(0);
如果您需要一个可能非常大的动态大小的数组,那么使用向量。如果您只需要一个实例,并且最大复调数是(比如说)64,那么就使用它。
唯一的方法是for-each
,在这里使用它就可以了。
DataTable t = new DataTable();
var fwdRowGroups = t.AsEnumerable().GroupBy(row => row.Field<object>("AcctId"));
DataTable g = new DataTable();
foreach (var row in fwdRowGroups)
{
g.Rows.Add(row);
}
另请注意删除多余的 ToList()
。你需要它做什么?
并在 DataRow.Fieldrow["AcctId]
您可能会发现 Timpani Software 的 MergeMagician 工具很有趣。它是一个分支管理和自动合并解决方案,可与 TFS(以及 Subversion)配合使用。您在分支之间创建发布/订阅关系,然后服务器自动进行合并。
MM 可用于实现 Shawn 提到的 TFS 分支指南中讨论的所有模式。
仅供参考,它是一个商业工具。我不知道有任何开源工具可以与 TFS 一起执行类似的操作。
请访问 http://www.timpanisoftware.com 查看。主页上有一个很好的概述视频。
You might find Timpani Software's MergeMagician tool interesting. It is a branch management and automated merging solution that works with TFS (and also Subversion). You create publish/subscribe relationships between branches, and then the server automates the merges.
MM can be used to implement all of that patterns discussed in the TFS Branching Guide that Shawn mentioned.
FYI, it is a commercial tool. I don't know of any open source tools that do anything like this that work with TFS.
Check it out at http://www.timpanisoftware.com. There's a good overview video on the home page.
TFS 分支和合并策略