我正在努力建造Amaya.当构建失败时
错误:在'('标记之前的预期unqualified-id
我在没有编译的文件上只使用预处理器(用-E替换-c选项)运行g ++以查看发生了什么.这产生了一个80,000行文件,向我显示'Blue'已被(2 << 8)取代,这清楚地解释了错误.如果我纠正这个,文件编译正常.我想我可以忍受,但我想知道为什么会这样.
有没有办法可以跟踪预处理器如何替换特定字符串,在本例中为"Blue"?
=================更新===================
好吧,我找到了罪魁祸首:
> headers=`g++ [omited for brevity] -M \
../../thotlib/dialogue/AmayaClassicNotebook.cpp`
> for file in $headers ; do grep -s -H Blue $file | grep "(2 << 8)";done
/usr/local/include/gc.h:#define Blue (2 << 8)
Run Code Online (Sandbox Code Playgroud)
所以添加#undef Blue解决了这个问题.因此,使用-M和grep的这种组合似乎没问题,但有时候C++预处理器定义可能是真正的森林; 我很好奇是否有更好的方法,一些聪明的GNU工具可能.
这只是一个假设情景来说明我的问题.假设它们之间共享两个线程和一个TVar.在一个线程中有一个原子块来读取TVar并需要10秒才能完成.在另一个线程中是一个原子块,每秒修改一次TVar.第一个原子块是否会完成?当然它会一直回到开头,因为日志永远处于不一致的状态?
我不这么认为,但我想我会问以防万一.例如,要在封装int的类中使用:
i = IntContainer(3)
i + 5
Run Code Online (Sandbox Code Playgroud)
我不只是对这个int示例感兴趣,我一直在寻找干净和通用的东西,而不是覆盖每个int和string方法.
谢谢,孙强.这就是我想要的.我没有意识到你可以继承这些不可变类型(来自C++).
class IntContainer(int):
def __init__(self,i):
#do stuff here
self.f = 4
def MultiplyBy4(self):
#some member function
self *= self.f
return self
print 3+IntContainer(3).MultiplyBy4()
Run Code Online (Sandbox Code Playgroud) 如何在python中修改函数的本地命名空间?我知道locals()在它内部调用时返回函数的本地命名空间,但是我想做这样的事情(我有理由为什么我要这样做,其中g不能被f访问,但它更快给出一个琐碎,愚蠢的例子来说明问题):
def g():
pass
def f():
g()
f.add_to_locals({'g':g})
Run Code Online (Sandbox Code Playgroud) 我想要类似的东西BaseHTTPRequestHandler,只是我不希望它绑定到任何套接字;我想自己处理传入和传出的原始 HTTP 数据。有没有什么好的方法可以让我在 Python 中做到这一点?
为了澄清,我想要一个从Python(不是套接字)接收原始TCP数据的类,处理它并返回TCP数据作为响应(再次返回到python)。因此,此类将处理 TCP 握手,并且将具有覆盖我在 HTTP GET 和 POST 上发送的内容的方法,例如do_GET和do_POST。所以,我想要类似已经存在的服务器基础设施的东西,除了我想在 python 中传递所有原始 TCP 数据包而不是通过操作系统套接字。
我正在编写一个Bison/Flex程序,将LaTeX转换为MathML.目前,处理函数(即\ sqrt,\ frac等)的工作方式与此类似,每个函数都有一个标记
\\frac {return FUNC_FRAC;}
Run Code Online (Sandbox Code Playgroud)
并将令牌FUNC_FRAC传递回bison,bison在此子树的描述中起作用:
function: FUNC_FRAC LBRACE atom RBRACE LBRACE atom RBRACE {$$ = "<mfrac>" + $3 + $6 + "</mfrac>";}
Run Code Online (Sandbox Code Playgroud)
但这意味着我需要定义和处理可能无限数量的令牌.我想做的是这样的事情,它不能像书面那样工作.在flex中:
\\[A-Za-z]+[0-9]* {return the-matched-string;}
Run Code Online (Sandbox Code Playgroud)
在野牛:
function: "\frac" LBRACE atom RBRACE LBRACE atom RBRACE {$$ = "<mfrac>" + $3 + $6 + "</mfrac>";}
Run Code Online (Sandbox Code Playgroud) 我使用Jasmin Java汇编程序编译玩具语言.但是当我使用jsr指令递归回子程序,并使用java运行Jasmin的输出时,我收到错误"递归调用jsr条目".这是Jasmin代码(它是计算5!(我已经省略了类定义;所有这些都在主方法体中)):
f:
swap
istore 2
iload 2
ifeq label0
iload 2
iload 2
ldc 1
isub
jsr f
istore 1
istore 2
iload 1
iload 2
imul
goto label1
label0:
ldc 1
label1:
swap
astore 0
ret 0
main:
ldc 5
jsr f
istore 1
iload 1
Run Code Online (Sandbox Code Playgroud) 我希望在数据框的列中看到所有可能值的列表,而不重复.就像是:
as.set(series["begin_year"][,1])
Run Code Online (Sandbox Code Playgroud)
对于"begin_year"列虽然as.set不存在.
我正在尝试获取以下代码进行编译
import IO
data MyInt = MyInt Int
data MyString = MyString String deriving Show
class Show b => MyClass a b where
fn :: a -> b
instance MyClass MyInt MyString where
fn (MyInt i) = MyString (show i)
myprint :: (MyClass a b) => a -> IO ()
myprint a = putStrLn $ show (fn a)
main = myprint (MyInt 3)
Run Code Online (Sandbox Code Playgroud)
与ghc Main.hs -XMultiParamTypeClasses.但是,编译器无法推断出b类型变量的类型(在本例中是MyString).如何将此信息明确告知编译器?
对于以下示例,mypy返回错误:
错误:赋值中的类型不兼容(表达式类型为“A”,变量类型为“A1”)
from typing import Type
class A:
pass
class A1(A):
pass
class A2(A):
pass
def fun(A_type: Type[A]) -> A:
if A_type == A1:
return A1()
else:
return A2()
a1: A1 = fun(A1)
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想做的是在以下签名中强制执行依赖项fun:
def fun(A_type: Type[A]) -> A_type
Run Code Online (Sandbox Code Playgroud)
这可能吗; 如果没有,推荐什么(注意:我希望它适用于尚未定义的子类A,所以我认为我不能使用overload装饰器)?我最好的选择只是使用cast吗?