Swift中方法(method)所谓的lazy绑定简介
来源:互联网 发布:asp报表系统源码 编辑:程序博客网 时间:2024/05/16 10:39
我们知道在ruby之类的动态语言中对象方法可以先从类中预先抽取,然后再应用到某个具体对象上.这称为无绑定的method对象,也可以叫做lazy绑定.
下面举个例子:
irb(main):004:0> system("ruby -v")ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]=> trueirb(main):005:0> class Airb(main):006:1> def test(i)irb(main):007:2> return i*iirb(main):008:2> endirb(main):009:1> end=> nil
以上在ruby中创建了一个类A,我们可以用它的实例调用test方法:
a = A.newa.test(11) => 121
我们也可以先创建一个无绑定的method,然后绑定到特定的实例上去:
irb(main):021:0> f_no_bind = A.instance_method("test")=> #<UnboundMethod: A#test>irb(main):022:0> f = f_no_bind.bind(A.new)=> #<Method: A#test>irb(main):023:0> f.call(11)=> 121irb(main):024:0> f[11]=> 121
最后一句是倒数第二句的语法糖,效果是一样的.
那么如果是类方法呢?那更简单了,直接用Obj.method()即可:
irb(main):025:0> class Airb(main):026:1> def self.test(i)irb(main):027:2> i*i*iirb(main):028:2> endirb(main):029:1> endirb(main):037:0> f_class_func = A.method("test")=> #<Method: A.test>irb(main):038:0> f_class_func[11]=> 1331irb(main):039:0> f_class_func.call(11)=> 1331
无论你承认与否,ruby比swift还要简洁,更具有美感!
现在回过头来看一下Swift中方法的lazy绑定又是什么样子的:
class Foo{ func test(val:Int)->Int{ return val * val }}let foo = Foo()foo.test(val: 11)let f = Foo.testf(foo)(11)
如果你查看f的类型会发现它是一个柯里函数:
(Foo) -> (Int) -> Int
那么如果是类方法呢?给Foo类新增一个类方法:
class func test(val:Int)->Int{ return val * val * val }
这时你会发现原来let f = Foo.test的结果变成了其类方法:
如果你想绑定其实例方法,你必须将其类型补全:
很好很强大,但还是没有ruby的简洁哦!
0 0
- Swift中方法(method)所谓的lazy绑定简介
- Swift中延迟属性@lazy
- 【iOS】Swift LAZY 修饰符和 LAZY 方法
- Spring中lazy-init,init-method,destroy-method解析
- Swift-工厂方法(Factory Method)
- Method 绑定方法到类
- 软件开发中没有所谓正确的方法
- 软件开发中没有所谓正确的方法
- 软件开发中没有所谓正确的方法
- 软件开发中没有所谓正确的方法
- 机器学习中的lazy method与eager method的比较
- Swift简介和添加Mark的方法
- Swift的lazy关键字–延迟加载
- Swift下的Lazy懒加载模式
- Hibernate中使用openSessionInView代替lazy="false"的方法
- swift的可选绑定
- windbg中所谓的上下文
- java中method的setAccessible方法
- 电子商务考试
- DB9 在 RS232 通讯上的应用接法详解
- faster rcnn源码解读总结
- 001_Unity3D客户端框架
- powerdesinger 批量修改表前缀
- Swift中方法(method)所谓的lazy绑定简介
- Python安装docx依赖包
- linux 安装RabbitMQ
- c++多线程
- 关于Android隐式启动Activity的分析和说明
- c#中数组赋值方法
- zImage与uImage引发的思考
- WebSocket 是什么原理?为什么可以实现持久连接?
- 手把手教你PHP--part1