是否有类似记录的struct-map?如果没有,我应该使用结构(文档不鼓励使用结构)?
也许我完全做错了什么?我有一个相当复杂的功能,目前需要一个选项图.我试图澄清哪些选项值是可接受/使用的(通过用记录替换它).现在我想将它连接到在地图中包含此信息的代码(并且其中包含记录中数据的超集).
以下代码,我认为是加载音乐的最小程序
db = Database('/media/andrew@acooke.org ipod')
itdb_device_set_sysinfo(db._itdb.device, "ModelNumStr", "C297")
db.import_file('/home/andrew/some-track.mp3')
db.copy_delayed_files()
db.close()
Run Code Online (Sandbox Code Playgroud)
将以下内容打印到stderr:
** (utrunner.py:11333): WARNING **: Itdb_Track ID '0' not found.
** (utrunner.py:11333): CRITICAL **: itdb_get_mountpoint: assertion `itdb' failed
** (utrunner.py:11333): CRITICAL **: prepare_itdb_for_write: assertion `link' failed
** (utrunner.py:11333): CRITICAL **: mk_mhla: assertion `fexp->albums' failed
** (utrunner.py:11333): CRITICAL **: mk_mhli: assertion `fexp->artists' failed
** (utrunner.py:11333): CRITICAL **: itdb_splr_validate: assertion `at != ITDB_SPLAT_UNKNOWN' failed
Run Code Online (Sandbox Code Playgroud)
并且不加载任何音乐.
当我运行gtkpod(它使用libgpod - 它们都来自同一个项目)时,它确实有效(并且只打印初始警告和ITDB_SPLAT_UNKNOWN
消息).路径都是正确的,我可以打开目录,写入文件等.数据库对象看起来是正确的(例如显示2个播放列表),并且存在SysInfoExtended文件.
我究竟做错了什么?有没有人有这个(libgpod Python包装)工作?
一个可能的线索是gtkpod提示我输入iPod类型(Classic 160GB).我没有在上面设置这些信息.我怎么设置? 更新 - 我确实尝试了上面显示的调用,并在下面的答案中提到,但它似乎没有效果(我最初没有包括它,因为我认为它一定是错的,但也许它是需要的,问题在其他地方).另外,gtkpod称之为"xB150"?!
我已经问过libgpod/gtkpod邮件列表,但没有得到回复.这是最新的稳定版本和git trunk(使用CFLAGS …
[看起来很奇怪,这不存在,所以如果它是重复的话,请提前道歉]
我想在C中测试逻辑相等性.换句话说,我想知道如果两个值都以与逻辑表达式相关联的正常方式转换,两个值是否相等.
在C99,我认为
(bool)a == (bool)b
Run Code Online (Sandbox Code Playgroud)
给出我想要的东西.那是对的吗?在传统的C中写这个的正常方法是什么?
我想生成头文件中定义的空过程.理想情况下,它们应该为指针返回NULL,为整数等返回0,并且在理想的世界中,还要向stderr打印调用哪个函数.
这样做的动机是需要实现一个包装器,它将复杂的现有API(头文件)的子集调整到另一个库.只需要委托API中的少量程序,但不清楚哪些程序.所以我希望使用一种迭代方法,在这种情况下,我针对这个自动生成的包装器运行,看看有什么叫做,用委托来实现,然后重复.
我看到从头部自动生成C++文件?但答案似乎是C++特定的.
因此,对于那些需要用简单术语拼写的问题的人来说,如何在给定头文件的情况下自动生成这样的实现?我更喜欢现有的工具 - 我目前对一个简单解决方案的最佳猜测是使用pycparser.
更新谢谢你们.两个好的答案.还发布了我目前的黑客.
我刚写了这段代码:
(defn parameters [transform-factory state]
(lazy-seq (let [[r1 state] (uniform state)
[r2 state] (uniform state)
[t state] (transform-factory state)]
(cons [t [r1 r2]] (parameters transform-factory state)))))
(defn repeated-transform [mosaic n transform-factory state]
(reduce transform-square mosaic
(take n (parameters transform-factory state))))
Run Code Online (Sandbox Code Playgroud)
该parameters
函数生成一个state
由其生成的惰性值序列,用于参数化某事物的重复变换(在本例中为"马赛克").
在我看来,它parameters
显示了一个相当常见的模式,当你有一些state
必须随身携带时(在这种情况下生成随机值).有这个名字吗?
是否有更好的方法来编写第一个函数?相关的问题通常可以通过reduce
"携带"状态来解决,但在这里我没有什么可以减少的.同样,reductions
似乎不合适.这对monad来说是个好例子吗?(从理论上看,我没有看到你如何定义一种方法将多个实例合并为一个,但也许这并没有改变实际的应用程序 - 它看起来像monad解决其他地方的问题,一些国家需要随身携带).
(ps我提到了随机数字,但我无法用在幕后使用可变状态的解决方案替换它 - 正如"正常"随机例程那样 - 出于与问题无关的原因).
Python文档测试将简单测试与源代码相关联(在Python中,它们在函数文档中). 更多信息和示例在这里.
Clojure有类似的东西吗?
我知道单元测试clojure.test
,但寻找与源更紧密集成的东西(通常单元测试在不同的文件中;这里我想让测试"在里面" defn
).
在我周围搜索我发现了这个,但它看起来非常不l(测试是在实际文本中,就像Python一样 - 当然,扩展的宏defn
会更好吗?).
或者也许有其他方法可以解决一般问题,即我有一些测试(通常是简单的事情,演示函数的基本属性),这些测试将更好地包含在文档中(我使用的是边缘)而不是单独的单元测试文件.
更新 这是一个例子:我有一个函数来计算从像素矩形到图像中心的(曼哈顿)距离(以像素为单位).这听起来很简单,但是由于边缘上有奇数或偶数像素的图像的"中心"含义不同,或者你测量的块的哪个部分,这种情况很复杂.所以我不得不写一些测试来直接获得代码.现在我看看文档,如果文档包含那些测试,那将是最好的,因为它们比函数更好地解释函数的功能......
我是pygame的新手,我打了我的第一个树桩,我找不到答案..
blitting文本后,然后更改同一个变量的字符串,游戏而不是用新的替换原始文本,重叠两个文本..?
我需要支持一些使用旧 Python 版本 (2.4) 的软件。所以我下载并编译了 Python 2.4 并将其安装在 virtualenv 中。到目前为止,一切正常,程序正常。
但是该软件正在尝试导入rpm
模块。而且我找不到该模块的源代码(它不是标准 Python 库的一部分,afaict)。
通常,一旦启用了 virtualenv ( source env/bin/activate
),我就可以使用easy_install
. 但是easy_install rpm
什么也找不到。有一个pyrpm模块,但它不是一回事(它安装了一个名为“pyrpm”的模块)。谷歌搜索也没用,因为它们都链接到关于如何构建 rpms 的文章......
如果我使用系统 python(在 Ubuntu 上),我可以安装这个python-rpm
包。但这适用于 Python 2.7。如何安装 Python 2.4 的等价物?
[我的印象是,很多Linux系统使用的rpm库都包含一个Python库,发行版将其打包为python-dev。但我看不到如何访问任意 python 版本。]
我不是在寻找包含 Python 2.4 的 RPM。我正在寻找一个名为 rpm 的模块,该模块由为 PYTHON 2.4 编写的软件使用。
简单版本:
这有效:
user=> (map + [1 2 3] [4 5 6] [7 8 9])
(12 15 18)
Run Code Online (Sandbox Code Playgroud)
这不是:
user=> (for [n (range 3)] [n (+ 1 n)])
([0 1] [1 2] [2 3])
user=> (map + (for [n (range 3)] [n (+ 1 n)]))
java.lang.ClassCastException
Run Code Online (Sandbox Code Playgroud)
为什么?
我对clojure很新,所以这可能是一个新手的错误.在下面的代码中,我试图将多个信号一起添加.每个信号都包含一个矢量(称为数据),我想分段添加.在REPL,这样的事情:
user=> (map + [1 2 3] [4 5 6] [7 8 9])
(12 15 18)
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像:
(defrecord signal [x y data])
(defrecord sampling [t0 dt n])
(defn random-signal [x y sampling tstart tend] …
Run Code Online (Sandbox Code Playgroud) 在手册中说:
在一般情况下,
__lt__()
并__eq__()
有足够的,如果你想比较运营商的传统含义
但我看到了错误:
> assert 2 < three
E TypeError: unorderable types: int() < IntVar()
Run Code Online (Sandbox Code Playgroud)
当我运行此测试时:
from unittest import TestCase
class IntVar(object):
def __init__(self, value=None):
if value is not None: value = int(value)
self.value = value
def __int__(self):
return self.value
def __lt__(self, other):
return self.value < other
def __eq__(self, other):
return self.value == other
def __hash__(self):
return hash(self.value)
class DynamicTest(TestCase):
def test_lt(self):
three = IntVar(3)
assert three < 4
assert 2 < three
assert …
Run Code Online (Sandbox Code Playgroud) clojure ×4
python ×3
c ×2
blit ×1
boolean ×1
duck-typing ×1
equality ×1
ipod ×1
linux ×1
marginalia ×1
monads ×1
pygame ×1
python-3.x ×1
record ×1
rpm ×1
state ×1
text ×1
unit-testing ×1