如何检查uri字符串是否有效(您可以将其提供给Uri构造函数)?
到目前为止,我只有以下内容,但由于显而易见的原因,我更喜欢不那么粗野的方式:
Boolean IsValidUri(String uri)
{
try
{
new Uri(uri);
return true;
}
catch
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了Uri.IsWellFormedUriString,但它似乎并不喜欢你可以在构造函数中抛出的所有内容.例如:
String test = @"C:\File.txt";
Console.WriteLine("Uri.IsWellFormedUriString says: {0}", Uri.IsWellFormedUriString(test, UriKind.RelativeOrAbsolute));
Console.WriteLine("IsValidUri says: {0}", IsValidUri(test));
Run Code Online (Sandbox Code Playgroud)
输出将是:
Uri.IsWellFormedUriString says: False
IsValidUri says: True
Run Code Online (Sandbox Code Playgroud)
更新/应答
Uri构造函数默认使用类Absolute.当我尝试使用Uri.TryCreate和构造函数时,这导致了差异.如果匹配构造函数和TryCreate的UriKind,则会获得预期的结果.
据我了解,未实现的方法通过以下方式解决:
这个三步流程定义在哪里?我想自己处理它,因为NSInvocation可能对我的需求来说太重了.我有一个围绕运行时源,并没有真正看到任何东西.
它看起来像旧的运行时会调用前进:args:在接收器上,这样做但似乎已经从新的运行时.我猜这个过程必须由框架而不是运行时定义,因为如果运行时依赖于Cocoa到需要NSInvocation来处理消息的程度,那就太奇怪了.是否可能是在NSObject/NSProxy上调用的无证方法?
编辑:
它看起来像运行时声明,但从未定义,当objc_msgSend找不到实现时调用的C函数:
id objc_msgForward(id object,SEL message,...);
我不为Apple工作,所以我不知道Foundation如何实现这一点,但至少在Cocotron的情况下,他们使用:
id objc_msgForward(id object,SEL message,...)
{
Class class=object->isa;
struct objc_method *method;
void *arguments=&object;
if((method=class_getInstanceMethod(class,@selector(forwardSelector:arguments:)))!=NULL)
return method->method_imp(object,@selector(forwardSelector:arguments:),message,arguments);
else
{
OBJCRaiseException("OBJCDoesNotRecognizeSelector","%c[%s %s(%d)]", class_isMetaClass(class) ? '+' : '-', class->name,sel_getName(message),message);
return nil;
}
}
Run Code Online (Sandbox Code Playgroud)
添加forwardSelector:arguments:方法似乎不起作用,所以我猜这是特定于Cocotron.有人知道objc_msgForward基金会做了什么吗?
如果我尝试手动编写ggplot2绘图的某些元素,它可以正常工作:
> p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
> p + geom_vline(xintercept = 20) + geom_point(data = mtcars)
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试将一些组合捆绑到一个函数中,我会收到一个错误:
> myFunction <- function() {
+ return(
+ geom_vline(xintercept = 20) + geom_point(data = mtcars)
+ )
+ }
> p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
> p + myFunction()
Error in geom_vline(xintercept = 20) + geom_point(data = mtcars) :
non-numeric argument to binary operator
Run Code Online (Sandbox Code Playgroud)
我ggplot2是否因为ggplot2 …
例如,使用数据集 mtcars
mtcars[ , "cyl"]
Run Code Online (Sandbox Code Playgroud)
和
mtcars[ , 2]
Run Code Online (Sandbox Code Playgroud)
两个都给我相同的专栏.所以,既然我可以得到一切,但第2列是这样的:
mtcars[ , -2]
Run Code Online (Sandbox Code Playgroud)
我不指望这个:
mtcars[ , -"cyl"]
Error in -"cyl" : invalid argument to unary operator
Run Code Online (Sandbox Code Playgroud)
相反,我能想到的最好的是:
mtcars[ , !colnames(mtcars)=="cyl"]
Run Code Online (Sandbox Code Playgroud)
有更简单的解决方案吗?
编辑:似乎合乎逻辑的是,如果前两种技术有效,那么后两种技术也应该如此.我希望我遗失了一些东西.帮助页面?"["或?subset不解释这种违反直觉的结果.有谁知道这是为什么?
所以我想在Dreamwaver CS5中实现类似的功能.我有一个可选的可编辑区域(可选,因为我不希望某些网页中的那个)和我的"主"模板中的另一个可编辑区域.所以我现在正在做的是从我的主模板创建一个新模板,然后更改要显示的可选可编辑区域,将其保存为新模板,最后从新模板创建新的网页.
不幸的是,似乎在新模板中可编辑的所有内容都可以在我刚创建的新网页中编辑.我希望只有主模板中的非可选可编辑区域可以在从新模板创建的所有新网页中进行编辑.我怎么能做到这一点?
所以我有很多需要写的日志文件.它们在程序开始时创建,并在程序关闭时保存到文件.
我想知道它是否更好:
fopen()在程序开始时,然后在程序结束时关闭文件 - 我只需要在需要时写入文件.这些文件是否仍然"开放"会减慢任何事情(例如其他文件io)吗?
要么
我将需要写入的内容保存到缓冲区中,然后打开文件,从缓冲区写入,在程序结束时关闭文件.我想这会更快?
对于我的编译器测试,我需要在我的测试代码中生成此"警告无效"的警告.我怎样才能做到这一点?
使用VS cl.exe编译器
我正在尝试对作为“dam_vector”模式一部分的表执行简单的选择语句。我得到的错误是:
psycopg2.ProgrammingError:关系“dam_vector.parcels_full”不存在第1行:SELECT * FROM“dam_vector.parcels_full”
我无法弄清楚这一点,并且知道我遗漏了一些明显的东西。您能提供的任何帮助都会很棒。
这是我正在使用的代码。db 是成功连接到数据库的连接字符串。
cur = db.cursor()
query = 'SELECT * FROM "dam_vector.parcels_full"'
cur.execute(query)
results = cur.fetchall()
Run Code Online (Sandbox Code Playgroud)
当那失败了,在我对谷歌做了一些研究之后,我尝试了这个。同样的错误。
cur.execute("SET search_path TO dam_vector,public")
db.commit()
cur = db.cursor()
query = 'SELECT * FROM "parcels_full"'
cur.execute(query)
results = cur.fetchall()
Run Code Online (Sandbox Code Playgroud) 鉴于:
F(F(n))= n
F(F(n + 2)+ 2)= n
F(0)= 1
其中n是非负整数.F(129)=?
我们如何以编程方式解决这类函数方程?我选择的编程语言是Python.
第一次,当我加载页面时,我的选择框为空:
<select name="secondaryTitle" id="secondaryTitle"></select>
Run Code Online (Sandbox Code Playgroud)
然后我进行ajax调用并获取上面选择框的json数据.
arrtitle = objSecTitle.getAllSecondaryTitle(serviceId); // its an ajax call, that returns json object
var obj = jQuery("#secondaryTitle");
removeAllOptions(obj);
for(i=0;i<arrtitle.length;i++)
{
obj.options.length=obj.options.length + 1;
obj.options[obj.options.length - 1].text = arrtitle[i][1];
obj.options[obj.options.length - 1].value = arrtitle[i][0];
}
function removeAllOptions(selectbox){
var i;
for(i=selectbox.options.length-1;i>=0;i--)
{
selectbox.remove(i);
}
}
Run Code Online (Sandbox Code Playgroud)
我的ajax电话很完美.上面的代码也会更改下拉项.但是当我们使用jQuery Mobile时,UI不会更新,因为它显示/隐藏选择弹出窗口的不同div.