首页 > 其他分享 >测试Open Live Writer

测试Open Live Writer

时间:2023-04-18 20:23:57浏览次数:46  
标签:调用 string Writer UFCS writeln Live print Open 函数

 

近10年D语言在社区驱动下得到巨大发展,语言核心去芜存菁,广泛吸收;标准库不断扩充;语法越来越“对人类友好”;betterC和importC使得D语言与C语言越来越成为一家人,为底层开发在做坚实的奠基;以vibe-d和hunt frame work为首的众多跨平台网络库,使得开发web框架和应用几乎与控制台和桌面程序一样的容易、简

Technorati Tags: D语言,D2,DMD,UFCS,OLW,Open Live Writer,WLW,Windows Live Writer

UFCS,Uniform Function Call Syntax.统一函数调用语法,或者,我按自己的理解,称为函数一致性调用语法,使得语言更贴近人类表达习惯,同时使得函数链调用变得非常可行,并且简单、简便。

 

对于一个模块级(module)自由函数,如果满足以下两个条件,即可像一个对象的成员方法一样去调用:

  • 这个对象没有(或不能有)一个这样的成员方法;
  • 这个自由函数的第一个参数与该类型匹配(该类,super类,可安全地类型转换成为该类型等)

到此,这个对象可以是任何类型,都可有如调用自己的成员方法一样去调用这个自由成员。

听起来还是有些别扭,看示例会更容易明白究竟是怎么一回事:

  1 /+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2 这个小程序演示D语言UFCS,函数一致性调用语法。
  3 一般地,如果有一个模块级自由函数void print(string msg),
  4 我们理所当然地这样去调用:
  5 print("早上好!");
  6 
  7 当以下两件条件满足时:
  8 1.string类型没有print()这样一个方法;
  9 2.自由函数的参数类型为string,正好是string类型
 10 
 11 string.print() 即可通过编译器允许,即与
 12 print("早上好”);
 13 一样。
 14 事实上由于UFCS这个特性,编译器首先查看string类型有没有
 15 print()这个方法,如果有,就调用;如果没有,则在模块级
 16 查看有没有print(stirng)这样一个自由函数,如果有,就调
 17 用它。
 18 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/
 19 
 20 module ufcstest;
 21 import std.stdio;
 22 
 23 void print(string msg)
 24 {
 25 	writeln(msg);
 26 }
 27 
 28 void main()
 29 {
 30 	"Hello UFCS".print();
 31 	"早上好".print;
 32 
 33 	readln;
 34 }

ufcstest

 

既然UFCS可以这样玩,那试试语言标准库标准输出函数writeln:

  1 module ufcstest;
  2 import std.stdio;
  3 
  4 /*
  5 void print(string msg)
  6 {
  7 	writeln(msg);
  8 }
  9 */
 10 void main()
 11 {
 12 	writeln("标准库writeln标准调用方法:");
 13 	writeln("晚上好");
 14 	writeln("我爱世界杯");
 15 
 16 	writeln("==============================");
 17 	writeln("UFCS调用:");
 18 
 19 	"晚上好".writeln();
 20 	"我爱世界杯".writeln;
 21 
 22 	readln;
 23 }

ufcstest1

下面示例一个非常简单的函数链调用:

  1 module ufcstest;
  2 import std.stdio;
  3 
  4 /*
  5 void print(string msg)
  6 {
  7 	writeln("标准库writeln标准调用方法:");
  8 	writeln("晚上好");
  9 	writeln("我爱世界杯");
 10 
 11 	writeln("==============================");
 12 	writeln("UFCS调用:");
 13 
 14 	"晚上好".writeln();
 15 	"我爱世界杯".writeln;
 16 }
 17 */
 18 
 19 double add(double a,double b)
 20 {
 21 	return a+b ;
 22 }
 23 
 24 void main()
 25 {
 26 	writeln("比起嵌套调用:writeln(add(10,20));");
 27 	writeln("add(10,20).writeln更符合连贯性思维。");
 28 	add(10,20).writeln;
 29 
 30 	readln;
 31 }

ufcstest2

可以初步稍稍想象一下,类成员函数有一些是返回类对象本身,再结合自由函数的UFCS,加之标准库,泛型,mixin等语言核心特性在一起,这个组合将是非常强大的。

标签:调用,string,Writer,UFCS,writeln,Live,print,Open,函数
From: https://www.cnblogs.com/godspeedsam/p/17330949.html

相关文章

  • 55 openEuler搭建Mariadb数据库服务器-配置环境
    55openEuler搭建Mariadb数据库服务器-配置环境说明:以下环境配置仅为参考示例,具体配置视实际需求做配置。55.1关闭防火墙并取消开机自启动说明:测试环境下通常会关闭防火墙以避免部分网络因素影响,视实际需求做配置。在root权限下停止防火墙。#systemctlstopfirew......
  • OpenHarmony源码解析之系统服务管理子系统
    1预备知识Linux中主要的IPC机制有:管道(pipe)、信号(signal)、信号量(semophore)、消息队列(Message)、共享内存(ShareMemory)、套接字(Socket)等。OpenHarmony基于binder驱动封装了一套ipc机制(foundation\communication\ipc)用于实现设备内的跨进程通信。Binder机制通常采用客户端-服务器(Cli......
  • OpenFeign组装请求头Header
    组装单个Header参数@RequestHeader("Authorization")Stringtoken组装多个Header参数@PostMapping(value="/a/b",headers={"Content-Type=application/json","a=AAAAAA","b=BBBBB"})ObjectcreateSth(@RequestBodyModel......
  • pandas读取Excel核心源码剖析,面向过程仿openpyxl源码实现Excel数据加载
    今天我们将研究pandas如何使用openpyxl引擎读取xlsx格式的Excel的数据,并考虑以面向过程的形式简单的自己实现一下。截止目前本人所使用的pandas和openpyxl版本为:pandas:1.5.2openpyxl:3.0.10今天所有的测试全部基于以下文件:pandas的read_excel核心代码这里我使用pycharm工具对以下代......
  • opengauss高可用之主备分开搭建
    一、概述如果两台服务器root密码不一致,两种解决方案1、手动对root设置免密,还可以一键式安装2、主备机器分开搭建,初始化环境,然后数据库安装二、搭建主从1、环境基础配置两台虚拟机操作系统配置依据这篇文章https://blog.51cto.com/u_13236892/61162562、配置文件vi /opt/software/......
  • Oracle mos文档关于视图v$open_cursor中说法矛盾
     Oraclemos文档关于视图v$open_cursor中矛盾说法 HowtoMonitorandtuneOpenandCachedCursors(文档ID1430255.1)中指出:v$open_cursorshowscachedcursors,notcurrentlyopencursors,bysession.Ifyouarewonderinghowmanycursorsasessionhasopen......
  • telnet远程管理linux主机及Zlib、openssl、openssh升级1
    一、telent远程管理主机1.安装telent服务服务端:yuminstalltelnet-server-y#安装服务端useradddaipasswddai#创建lhj用户,设置lhj密码,密码有规则要求,大小写数字加符号,输2次即可客户端:yuminstalltelnet-y#安装客户端2.测试telent登录客户端:telnet192.......
  • 使用强大的可视化工具redislive来监控我们的redis,别让自己死的太惨~~~
    作为玩windows的码农,在centos上面装点东西,真的会崩溃的要死,,,我想大家也知道,在centos上面,你下载的是各种源代码,需要自己编译。。。而使用yum的话,这个吊软件包有点想nuget,不过yum上面都是老的掉牙的软件。。。有时候还要升级,比如我在安装redis的另一种监控re......
  • 54 openEuler搭建Mariadb数据库服务器-Mariadb介绍
    54openEuler搭建Mariadb数据库服务器-Mariadb介绍MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品,MariaDB还提供了许多更好的新特性。54.1MariaDB的架构MariaDB的架构......
  • HAProxy + Keepalived实现mycat高可用方案
    在实际项目中,Mycat服务也需要考虑高可用性,如果Mycat所在服务器出现宕机,或Mycat服务故障,需要有备机提供服务,需要考虑Mycat集群。高可用方案我们可以使用HAProxy+Keepalived配合两台Mycat搭起Mycat集群,实现高可用性。HAProxy实现了MyCat多节点的集群高可用和负......