将布尔值与==Python中的工作进行比较.但是当我应用布尔not运算符时,结果是语法错误:
Python 2.7 (r27:82500, Sep 16 2010, 18:02:00)
[GCC 4.5.1 20100907 (Red Hat 4.5.1-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> True == True
True
>>> False == False
True
>>> True is not False
True
>>> True == not False
File "<stdin>", line 1
True == not False
^
SyntaxError: invalid syntax
>>>
Run Code Online (Sandbox Code Playgroud)
为什么这是语法错误?我希望not False是一个返回布尔值的表达式,并且True == <x>只要<x>是具有有效语法的表达式,它就是有效的语法.
我有以下代码:
public class Parent
{
public string MyField { get; set; }
}
public class Child : Parent
{
protected new int MyField { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我试着通过以下方式访问:
static void Main(string[] args)
{
Child child = new Child();
child.MyField = "something";
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio 2008编译时没有注释,但在Mono(2.4.2,Ubuntu)下我收到错误消息
'HideTest.Child.MyField' is inaccessible due to its protection level (CS0122)
Run Code Online (Sandbox Code Playgroud)
一个实现或其他更符合标准吗?
编辑:感谢所有指出糟糕设计的人.不幸的是,它是第三方库,并且显着地改变它是不实际的.
我正在尝试使用HttpWebRequest通过HTTP获取一系列文件.第一个请求通过正常,但第二次通过相同的代码GetResponse()挂起并超时.WireShark显示没有为第二个请求发送HTTP流量,因此看起来这是一个API问题.
经过一些调查,我发现它与指定内容长度有关:如果我把它留下来,那么代码工作正常.
我的代码是:
HttpWebRequest httpWebRequest = ConfigureRequest();
using (WebResponse webResponse = httpWebRequest.GetResponse())
// On the second iteration we never get beyond this line
{
HttpWebResponse httpWebResponse = webResponse as HttpWebResponse;
using (Stream webResponseStream = httpWebResponse.GetResponseStream())
{
if (webResponseStream != null)
{
// Read the stream
}
}
statusCode = httpWebResponse.StatusCode;
httpWebResponse.Close();
}
Run Code Online (Sandbox Code Playgroud)
症状似乎与这个问题和这个问题非常相似,但在这两种情况下,给出的建议是处理我已经在做的WebResponse.
编辑在回应Gregory时,这里是ConfigureRequest():
private HttpWebRequest ConfigureRequest()
{
string sUrl = CreateURL(bucket, key);
HttpWebRequest httpWebRequest = WebRequest.Create(sUrl) as HttpWebRequest;
httpWebRequest.AllowWriteStreamBuffering = false;
httpWebRequest.AllowAutoRedirect = true; …Run Code Online (Sandbox Code Playgroud) 我有以下功能:
void doStuff(int unusedParameter, ...)
{
va_list params;
va_start(params, unusedParameter);
/* ... */
va_end(params);
}
Run Code Online (Sandbox Code Playgroud)
作为重构的一部分,我想删除未使用的参数,而不另行更改函数的实现.据我所知,va_start当你没有最后一个非变量参数引用时,就不可能使用它.有没有办法解决?
背景:它实际上是一个C++程序,所以我可以使用这里建议的一些运算符重载魔法,但我希望此时不必更改接口.
现有函数通过要求变量参数列表以空值终止并扫描NULL来完成其工作,因此它不需要一个前导参数来告诉它有多少参数.
在回应评论:我不具备删除未使用的参数,但我会做到这一点,如果有一个干净的方式来做到这一点.我希望有一些我想念的简单.
我想从MySQL中包含文件名的字段中提取文件扩展名.这意味着我需要找到最终的'.' 该字段中的字符,然后提取所有内容.以下代码示例部分有效:
SELECT LCASE(RIGHT(filename, LENGTH(filename) - LOCATE('.', filename)))
FROM mytable;
Run Code Online (Sandbox Code Playgroud)
除了它在文件名包含多个'.'的情况下,它会提取太多.在大多数编程语言中,我希望找到一个能让我最合适的函数,但是我找不到MySQL的任何这样的东西,我也找不到那些遇到同样问题并找到解决方法的人的讨论.
我有以下C代码:
#include <math.h>
int main(int argc, char ** argv)
{
double mydouble = 100.0;
double whatever = round(mydouble);
return (int) whatever;
}
Run Code Online (Sandbox Code Playgroud)
当我编译它时,我收到警告:
round_test.c: In function ‘main’:
round_test.c:6: warning: implicit declaration of function ‘round’
round_test.c:6: warning: incompatible implicit declaration of built-in function ‘round’
Run Code Online (Sandbox Code Playgroud)
我对C生锈了,但我认为#include将round()的声明带入了范围.我已经检查了我的ANSI标准(C99是我唯一的副本),它确认了math.h标题中存在round()函数.我在这里错过了什么?
编辑:编译器是Ubuntu上的GCC 4.3.2(intrepid,IIRC).运行gcc -E给出:
$ gcc -E round_test.c | grep round
# 1 "round_test.c"
# 1 "round_test.c"
# 2 "round_test.c" 2
double whatever = round(mydouble);
Run Code Online (Sandbox Code Playgroud)
所以这个定义显然没有在标题中找到.
假设我有一个工厂方法,它想要构建一个在运行时通过反射选择的类型的实例.进一步假设我的工厂方法是通用代码,它不直接引用包含指定类型的程序集,尽管它将从具有必需程序集引用的应用程序中运行.
我如何编写可以找到这种类型的代码?如果我做以下事情
public object CreateInstance(string typeName)
{
Type desiredType = Assembly.GetExecutingAssembly().GetType(typename);
// Instantiate the type...
}
Run Code Online (Sandbox Code Playgroud)
这似乎失败,因为未在执行程序集中定义类型.如果我可以在运行时获得所有程序集,我可以迭代它们并找到哪一个包含我想要的类型.但我看不到这样做的方法.AppDomain.CurrentDomain.GetAssemblies()看起来很有希望,但不会返回我在项目中引用的所有程序集.
编辑:有几个人指出我需要加载程序集.麻烦的是,这段代码不知道它应该加载哪个程序集,因为我试图以不依赖于其他程序集的方式编写此代码.
我故意遗漏了细节typeName,因为从我的实际代码中实际上从字符串到类型的映射更复杂.实际上,类型由包含指定字符串的自定义属性标识,但是如果我可以获取类型列表,则将列表限制为所需类型没有问题.
我有一个脚本试图将一些数据加载到MySQL中LOAD DATA INFILE.出于某种原因,如果文件位于/tmp目录中,则它可以工作,但如果文件位于具有相同权限的另一个目录中,则不起作用.我找不到任何方法让MySQL从/tmp目录外部或数据库目录中导入数据,但我在手册中找不到任何解释为什么会出现这种情况的内容.
情况:
$ ls -l /
...
drwxrwxrwt 21 root root 4096 2010-10-19 20:02 tmp
drwxrwxrwt 2 root root 4096 2010-10-19 20:14 tmp2
$ ls -l /tmp/data.csv
-rwxr-xr-x 1 timm timm 415431 2010-10-19 20:02 /tmp/data.csv
$ ls -l /tmp2/data.csv
-rwxr-xr-x 1 timm timm 415431 2010-10-19 20:14 /tmp2/data.csv
Run Code Online (Sandbox Code Playgroud)
AFAICT在重要方面是相同的.但是,如果在MySQL命令行,我做:
> LOAD DATA INFILE '/tmp2/data.csv' IGNORE INTO TABLE ports
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY ' ';
ERROR 29 (HY000): …Run Code Online (Sandbox Code Playgroud) 我在C++文件中有以下代码:
#include <sys/socket.h>
// ...
void someFunc() {
struct msghdr msg = {0}; // <<< Uninitialized member here
}
Run Code Online (Sandbox Code Playgroud)
当我g++使用编译时-Wall -Wextra,我收到警告:
error: missing initializer for member 'msghdr::msg_namelen'
...same for several other fields
Run Code Online (Sandbox Code Playgroud)
我的问题是:我无法显式初始化所有字段,因为我不知道哪些字段将存在(跨平台)struct msghdr.该结构没有默认构造函数,因为它是一个C结构.我的印象是该= {0}表单导致所有字段的零初始化(这对我来说没问题),但g++错误消息表明没有.
我有什么选择?
我想使用Hy,一种基于Python的Lisp方言.然而,我的同事都使用Python,不太可能很快切换到Lisp方言.
如何将Hy代码打包到标准Python模块中?