序列拼接

本文从Self的一个bug引出序列拼接功能,指出该功能在各类语言中虽大多有提供,但接口设计不同,主要体现在是否支持非字符串序列拼接以及作为哪类对象的方法。还汇总了Open Dylan、Ruby、Python、Dart等语言的实现,最后总结了Self的模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序列拼接

29 Oct 2016

故事从Self的一个bug说起。

在Self中,序列的拼接是由traits indexablejoinUsing:方法实现,具体行为是以某一分隔符将序列组拼接为单一序列。Self原先的实现是以序列的第一元素类型作为返回值的类型。这样如果组中没有任何序列,joinUsing:不是返回一个空白序列,而是报empty collection error的错误。在报告该问题后,很快得到了修复,改为以分隔符为返回类型的基准。

序列拼接是较为通用的功能,最常见的是体现在字符串拼接中。该功能各类语言大多有提供,但在接口设计上不尽相同。这在问题报告中已经有简要的总结,下文将进一步展开讨论。

总体来说,各语言在该功能设计上,主要有两点不同:

  1. 是否支持除字符串之外的序列对象拼接;

  2. 作为哪类对象的方法(是字符串的方法还是序列的方法)。

以下汇总几种语言的实现:

Open Dylan

Open Dylan中该功能为序列组的方法,在结果类型的处理上,如果序列组是空,则返回与分隔符类型相同的序列,否则,返回序列组元素相同的序列;

Ruby

Ruby中该功能为序列组的方法,不管序列中对象是何种类型,统一先转化为字符串,最终结果为字符串拼接后的结果;

Python

Python中该功能为字符串分隔符的方法,序列组中只允许字符串元素,结果为字符串;

Dart

Dart的接口设计与Ruby类似。

各类语言在序列拼接功能设计上有松散有严谨,有简洁有复杂,可以部分看出各语言的设计哲学。

最后总结下Self的模式:作为序列组的方法,不事先转化为字符串,允许其他序列的拼接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值