`
ideage
  • 浏览: 327315 次
社区版块
存档分类
最新评论

D2.0的字符串

阅读更多

D2.0的字符串增加了常量,不变量和变量.在很大程度上增加了语意的清晰度.但给编程带来了更小的粒度.如同使用动态脚本语言,你不必关系类型,使用静态语言你就要严格定义.D2就更严格了:对字符串也进行严格的定义.

 

1.变量 D1.0的字符串都是变量.也就是mutable的.D2中仅仅char[] 是变量,可以运用下标进行访问每个char的变量.

 

2.不变量是invariant的.也就是不变的.一旦初始化就不可以更改.修改长度,连接,切片还是可以的.

 

3.常量是const定义的.const可以在编译时求值的.

 

从D2的文档来看,D引入不变量和常量主要为了多核并行编程.

 

4.例子1:

alias char[] mstring; // 可变的
alias const(char)[] cstring; //常量
alias invariant(char)[] istring; // 不变量
class String{
	
	/// 字符串数据
	private mstring value_;

	///参数多数都用不变量或者常量
	public this (cstring value = "")
	{
		this.value_ = value.dup;
	}
	
	///可以使用cast转换,在D1和D2兼容
	public istring value (cstring v)
	{
		return cast(istring) (this.value_ = v.dup);
	}	

	public istring value ()
	{
		return cast(istring) this.value_;
	}
	
	
	///仅使用D2可以使用idup获得一个不变量的副本	
	public istring ivalue (cstring v)
	{
		return (this.value_ = v.dup).idup; 
	}
	public istring ivalue ()
	{
		return this.value_.idup; 
	}
}

 

5.调用C的API,要使用std.string.toStringz转换const char*,char*时,可以用cstring.ptr指针,进行转换cast(char*) cstring.ptr;

 

 

6.invariant,immutable都是D2的关键字.通过试验,二者似乎没有区别.

 

7.下面代码在D2.027,XP测试通过.

 

import std.stdio;

void main()
{		
	string istr;
	istr = "abcde";
	immutable(char)[] p = cast(invariant)istr.dup;
	char[] mstr = istr.dup;
	writefln(mstr);
	istr = istr ~ istr;
	writefln(istr);
	string istr2 = istr.idup;
	istr2 = istr2 ~ istr2;
	writefln(istr2);
	istr2.length = 3;
	istr2 = istr2 ~ "ff";
	writefln(istr2);	
	string istr3 = istr2[2..4];
	istr3 ~= "gg";
	writefln(istr3);
	//istr3[3]='a'; error
	istr3= istr3[0..2]~'a'~istr3[3..$];
	writefln(istr3);
	
}

 

 

 

不当之处,希望大家指正!

分享到:
评论
4 楼 ideage 2009-04-07  
以前没有尝试过D2,这几天看了看.Colorful 一直在用D2吧!欢迎指导!
3 楼 Colorful 2009-04-07  
没错,从 D1 迁移到 D2,问题最多的就是字符串了。

其他的高级特性, D1 都没有,呵呵。

我记得以前好像在 ideage 的另一篇文章中讨论过这个问题。
2 楼 ideage 2009-04-07  
迁移到D2,几乎所有问题都是关于常量,变量,不变量的.并且还都是字符串.唉....
1 楼 betty_betty2008 2009-04-07  
8错8错,几好几好。俺正想了解一下字D2字符串而懒得啃英文文档,来得及时,赞一个先!!

相关推荐

    表达式字符串解析求值(V2.0)

    在IT领域,表达式字符串解析求值是一种常见的编程任务,特别是在动态语言和脚本环境中。这个主题涉及到将人类可读的字符串形式的数学或逻辑表达式转换为计算机可执行的代码,然后对其进行计算以得到结果。V2.0版本...

    Python 字符串、内建函数.doc

    Python 字符串是一种基本的数据类型, Python 中字符串可以使用引号('或")来创建, Python 访问字符串中的值可以使用方括号来截取字符串, Python 字符串连接可以对字符串进行截取并与其他字符串进行连接, Python ...

    Python字符串常用方法汇总.docx

    Python 的字符串内建函数是从 Python1.6 到 2.0 慢慢加进来的 —— 它们也被加到了 Jython 中。这些方法实现了 string 模块的大部分方法,如下表所示列出了目前字符串内建支持的方法,所有的方法都包含了对 Unicode ...

    D 语言 2.0 编程参考手册(上,中,下)

    9. **标准库**:D语言的标准库(Phobos)包含了大量实用的模块,涵盖了I/O、网络、字符串处理、算法、数学等多个领域,极大地丰富了编程环境。 10. **语法简洁**:D语言的语法清晰、简洁,类似C/C++,易于理解和...

    日历laydate2.0版

    - `elem`:需要绑定的日历元素,可以是DOM对象或字符串。 - `type`:默认为日期,可选值有'date'、'datetime'、'time'、'year'、'month'等。 - `value`:默认值,可以是日期字符串或Unix时间戳。 - `range`:...

    怪物正则表达式--需要.netfromwork2.0

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换操作。它在编程语言中广泛使用,包括.NET Framework中的实现。在.NET Framework 2.0版本中,正则表达式库提供了丰富的功能,使得开发者...

    DotNet Helper v2.0 build 20091224

    3.增加了修复 IL 文件截断字符串功能,截断的字符串肯能会导致 PASSOLO 不能解析 4.增加了编译时插入强命名的功能 2007-03-24 更新 1.修复部分机器不能运行的问题。 2.修复程序在系统根目录路径的问题。 附加信息 ...

    C#编写的正则表达式测试工具(net2.0)

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换。在C#编程语言中,正则表达式是通过`System.Text.RegularExpressions`命名空间中的类来实现的,尤其是`Regex`类。这个名为"C#编写的正则...

    EXT2.0中文教程

    8.5.5. 反向操作,ext把json变成字符串 8.6. 小声说说scope 8.7. 菜单和工具条 8.7.1. 至简至廉的菜单 8.7.2. 丰富一点儿的多级菜单 8.7.3. 单选多选,菜单里搞这套 8.7.4. 小把戏,定制好的菜单 8.7.5. SplitButton...

    (完整版)Python转义字符.doc

    Python 的字符串内建函数是从 Python1.6 到 2.0 慢慢加进来的——它们也被加到了 Jython 中。这些方法实现了 string 模块的大部分方法,如下表所示列出了目前字符串内建支持的方法,所有的方法都包含了对 Unicode 的...

    Go语言声明一个多行字符串的变量

    Go如何声明一个多行字符串的变量?使用 ` 来包含即可。 package main import ( fmt ) func main() { str := `hello world v2.0` fmt.Println(str) } Demo:http://play.golang.org/p/BOL8_SwQ0D 以上所述就是...

    Python中的字符串类型基本知识学习教程

    ### Python中的字符串类型基本知识学习教程 #### 一、字符串基础概述 在Python编程语言中,字符串(String)是一种非常重要的数据类型,它由零个或多个字符组成,并且被广泛应用于处理文本信息。字符串可以被视为一...

    asp.net 2.0 验证控件的正则表达式规则

    正则表达式是一种强大的文本处理工具,可以用来匹配、查找、替换和验证字符串模式。在ASP.NET 2.0中,我们可以使用正则表达式验证控件(RegularExpressionValidator)来实施复杂的输入验证,如电子邮件地址、电话...

    C语言IO--printf右对齐补零

    printf函数的调用格式为:printf("<格式化字符串>", <参量表>); 其中,格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以“%”开始,后跟一个或几个规定字符,...

    foxit pdf editor注册码 V2.0

    注册码(或序列号)是软件开发商为了验证用户是否拥有合法使用权而设置的一串字符。对于Foxit PDF Editor V2.0这样的商业软件而言,注册码是解锁全部功能、获取官方技术支持及享受软件更新的关键。未注册版本通常会...

    D_语言编程参考手册_2.0(上).pdf

    这些库可能涵盖字符串处理、I/O操作、网络编程、线程管理等多个领域,大大提升了开发者的生产力。 函数式编程方面,D语言支持高阶函数、闭包和递归,这些特性使得D语言在处理数据和编写简洁代码时具有灵活性。同时...

    正则表达式验证例子 web 2.0 c# asp.net 源码

    - 正则表达式由各种特殊字符和元字符组成,用于定义一个字符串模式。 - 常见的元字符包括`.`, `*`, `+`, `?`, `{n}`, `{n,}`, `{n,m}`等,分别代表任意字符、零个或多个、一个或多个、零个或一个以及指定范围内的...

    ASCII转换 v2.0

    在編輯框輸入要轉換的字符串,然後按鍵進行轉換. 此轉換器還有一個特殊效果---通殺;在通殺狀態下,你可以選定系統任何窗口的字符串,然後按鍵進行轉換。 默認轉換鍵: Ctrl+A:大寫轉小寫Ctrl+S:小寫轉大寫...

Global site tag (gtag.js) - Google Analytics