我正在阅读"Practical Common Lisp",我想知道Common Lisp是否支持像Duck这样的Duck-Typing?
在Ruby中,只要它实现一个带有调用者假定的名称和参数列表的方法,就可以在一个对象上调用一个方法,而不管它是什么类.
CLOS怎么样?是否可以在不考虑类的情况下调用对象,只需假设泛型函数可以处理它.也许不需要使用duck-typing,因为CLOS不遵循消息传递哲学,并且方法没有绑定到类.
我需要通过ActiveRecord访问遗留关系数据库,该数据库使用名为"object_id"的列作为表中的主键.大多数工作都有效,但是当我尝试为关联指定自定义SQL查询(见下文)ActiveRecord时,Ruby解释器总是检索Ruby基础"Object"的object_id而不是数据库中的列值.
我在has_many声明中定义了以下SQL查询:
:finder_sql =>"SELECT*FROM t_object WHERE object_id IN(SELECT end_object_id FROM t_object,t_connector WHERE t_object.object_id =#{object_id} AND start_object_id =#{object_id})
我已经尝试通过使用别名来解决它:
alias_attribute:my_oid,:object_id
并在SQL查询中使用"my_oid".但是我收到以下错误消息:
NameError:未定义的局部变量或EaTObject的方法`my_oid'(表不存在):Class
我还定义了一个方法,它返回read_attribute("object_id")的值,并将方法名称放入SQL查询而不是"object_id",但是当加载类时,我得到的错误消息是该方法名称不是列名在数据库表中.
有没有解决方案来访问名为"object_id"的列?