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

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字符串而懒得啃英文文档,来得及时,赞一个先!!

相关推荐

    DotNet Helper v2.0 build 20091224

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

    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...

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

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

    ASCII转换 v2.0

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

    Objective-C2.0程序设计

    第15章 数字、字符串和集合 15.1 数字对象 15.2 字符串对象 15.2.1 NSLog函数 15.2.2 可变对象与不可变对象 15.2.3 可变字符串 15.2.4 所有对象到哪里去了 15.3 数组对象 15.4 同步AddressCard方法 15.4.1 快速枚举 ...

    程序员编程艺术:面试和算法心得.pdf

    第一章 字符串 o 1.0 本章导读 o 1.1 旋转字符串 o 1.2 字符串包含 o 1.3 字符串转换成整数 o 1.4 回文判断 o 1.5 最长回文子串 o 1.6 字符串的全排列 o 1.10 本章习题 第二章 数组 o 2.0 本章导读 o 2.1 寻找最小的...

    类库KYLib 2.0 for VC6

    字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...

    类库KYLib 2.0 for VS2005

    字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...

    类库KYLib 2.0 for VS2003

    字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...

    street-address:以字符串检测和剖析美国街道地址

    解析返回规范化Address对象的字符串。 如果字符串不是美国地址,则返回nil。 这是最初由Schuyler D. Erle编写的perl模块的端口。 Ruby版本 StreetAddress :: US 2+版旨在与ruby 2+一起使用。 它可能适用于ruby ...

    js 加载并解析XML字符串的代码

    js 加载并解析XML字符串的实现代码,需要的朋友可以参考下。

    类库KYLib 2.0.8.1 for VC6

    字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...

    类库KYLib 2.0.8.4 for VC6

    字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...

    类库KYLib 2.0.9.0 for VS2003

    字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...

    类库KYLib 2.0.9.0 for VC6

    字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...

    类库KYLib 2.0.9.0 for VS2005

    字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...

    类库KYLib 2.0.9.0 for VS2008

    字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...

    五子棋tc2.0算法

    /*两个人的得分转换成字符串输出*/ void playtoplay(void);/*人人对战函数*/ void DrawQp(void);/*画棋盘函数*/ void SetPlayColor(int x);/*设置棋子第一次的颜色*/ void MoveColor(int x,int y);/*恢复原来...

    asp.net中将某字符串切割成阵列并排序列出

    代码如下: protected void ...d;z;y;u”; string[] sa = s.Split(‘;’); Array.Sort(sa); //排序 for (int i = 0; i ”); } } 执行结果: 您可能感兴趣的文章:ASP.Net2.0 GridView 多列排序,显示排序图标,分页让A

    类库KYLib 2.0 for Linux.FC9.i686

    字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...

Global site tag (gtag.js) - Google Analytics