[英]PyClips: Create multislot / multifield containing references to other clips instances
[英]Pyclips: Error when setting a clips class instance multislot to [ ]
我希望一個類實例的多插槽成為一個空列表。 我不確定剪輯或pyclips中是否有錯誤,或者我做錯了。
import clips
C = clips.BuildClass("C", "(is-a USER)(multislot s)")
i = clips.BuildInstance("test1", C)
#i.Slots['s'] = clips.Multifield([]) # error
i.Slots['s'] = [] # error
#i.Slots['s'] = clips.Multifield(["1", "4"]) # no error
#i.Slots['s'] = ["1", "4"] # no error
print i.Slots["s"]
我收到此錯誤: _clips.ClipsError: C09: unable to understand argument
堆棧跟蹤:
File "\\VBOXSVR\vagrant\return_empty_list_bug.py", line 6, in <module>
i.Slots['s'] = [] # error
File "c:\Python27\Lib\site-packages\clips\_clips_wrap.py", line 175, in _WRAPPER
return f(self, *args)
File "c:\Python27\Lib\site-packages\clips\_clips_wrap.py", line 269, in _WRAPPER
return f(self, *newargs)
File "c:\Python27\Lib\site-packages\clips\_clips_wrap.py", line 2506, in __setitem__
_c.directPutSlot(self.__instance, name, _py2cl(v))
_clips.ClipsError: C09: unable to understand argument
上面的示例可在clipspy中使用 。
import clips
environment = clips.Environment()
environment.build('(defclass C (is-a USER) (multislot s))')
c_class = environment.find_class('C')
instance = c_class.new_instance('test1')
instance['s'] = []
print(instance)
print(instance['s'])
輸出。
[test1] of C (s)
[]
問題似乎在文件clipsmodule.c
第1788行中:
case MULTIFIELD:
if(!PyList_Check(value))
goto fail;
n = PyList_Size(value);
if(n == 0) goto fail; // <---- This seems to cause the error.
if(!(do_value = EnvCreateMultifield(env, n)))
goto fail;
for(i2 = 0; i2 < n; i2++) {
item = PyList_GetItem(value, i2);
if(!item)
goto fail;
if(!i_py2do_mfhelp_e(env, item, do_value, (int)(i2 + 1)))
goto fail;
}
break; /* n is still good for below */
我不知道為什么要進行此檢查,如果我取消注釋會產生什么影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.