Chapter 16_5 单一方法

Posted daiker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Chapter 16_5 单一方法相关的知识,希望对你有一定的参考价值。

  当一个对象只有一个方法时,可以不用创建接口table,但是要将这个单独的方法作为对象来返回。可以参考迭代器那一节,是如何构造一个迭代器函数,那个函数将状态保存为closure。

  一个具有状态的迭代器是一个单一方法对象

  单一方法对象还有一种情况,若这个方法是一个调度(dispatch)方法,它根据某个参数来完成不同的操作:

function newObject(value)        --value is upvalue
    return function(action, v )
        if action == "get" then return value
        elseif action == "set" then value = v
        else error("invalid action")
        end
    end
end

如下所示:

d = newObject(0)
print(d("get"))        --> 0
d("set",10)
print(d("get"))        --> 10

每个对象都用一个closure,这比都用一个table更高效。虽然无法实现继承,却拥有了完全的私密控制。

访问一个对象状态只有一个方式,那就是通过它的单一方法。

以上内容来自:《Lua程序设计第二版》和《Programming in Lua  third edition 》

以上是关于Chapter 16_5 单一方法的主要内容,如果未能解决你的问题,请参考以下文章

Chapter 16_2 继承

Chapter 16_4 私密性

读书笔记——chapter 5 用户身份与文件权限

西瓜书《机器学习》课后答案——chapter16_强化学习

Chapter 14_5 _ENV和load

Chapter 16_0 面向对象编程