编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   
 [lisp-tut]采取格式串分开
指数 -> 编程,一般编程 -> 功能规划
查看上一个主题 可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
WTD.




邮政发布: 星期四02,2006 6:31 PM  帖子主题:[Lisp-Tut]采用格式串

采取格式串

首先让我们看一下动作的格式字符串。

代码:
[1]> (format nil
             "〜{〜#[〜;〜a〜;〜a和〜a〜:;[email protected]{~A~#[~;, and ~:;, ~]~}~]~}"
             '(1 2 3 4))
"1, 2, 3, and 4"
[2]> (format nil
             "〜{〜#[〜;〜a〜;〜a和〜a〜:;[email protected]{~A~#[~;, and ~:;, ~]~}~]~}"
             '(1 2))
"1 and 2"


恐怖是可以理解的

那是一个可怕的复杂字符串,不是吗?

关键,但很简单。你只是必须将其分解为更易于理解的较小部分。

基本

TILDE(〜)介绍了格式指令。

最简单的是〜a,它可以代表任何东西。

〜{和〜}指令处理循环和〜[和〜]处理条件。

那么......那个字符串发生了什么?

外部指令是〜{和〜}。这需要列表并迭代它。对该列表评估封闭的指令。

接下来我们有〜#[和〜]指令。这是条件指令上的变体。 #表示它考虑了剩下的项目数。条件下的每个子句都分隔〜;,默认子句由〜:;指示。

让我们来看看条款。

第一个是空的。如果列表中没有任何内容,这是我们将输出的。

下一个与单个项目的列表交易。在这里,我们只有a,所以我们只是输出该元素。

第三个与有两个元素的交易。在这里,我们使用“〜a和〜a”输出加入“和”的两个元素。

最终条款

这一个比前三个截然不同,但尚不超越我们的理解。

代码:
〜@ {〜a〜#[〜;,和〜:;, ~]~}


外部〜{和〜}指令再次进行迭代构造。添加的@符号是意味着它将遍历剩下的任何东西。在这种情况下,这意味着它将迭代列表外部迭代指令抓住。它迭代1,2,3和4。

在这些指令中,我们首先输出单个项目。然后我们有一个条件,决定应该遵循该项目。

如果剩下零项,则输出任何输出。

如果只剩下一个项目,输出“和”。

如果剩下两个或多个项目,则分隔符是逗号和空格。

为什么?为什么?为什么?!

为什么我们应该自己对这种无法形容的恐怖?

当然,必须有一种更可读的方式来表达这个逻辑。

代码:
类阵列
   def join_as_english_list.
      case length
         when 0
            ""
         when 1
            first.to_s
         when 2
            "#{first} and #{last}"
         else
            "#{self[0...-1].join(", ")}, and #{last}"
      end
   end
结尾


现在,在所有诚实,那不是那么糟糕,但再一次,Ruby非常富有表现力。

它仍然是一个公平的代码,可以通过透过,它隐藏了一些在图书馆方法中的复杂性,必须理解为完全欣赏这种新方法正在做的事情。

如果程序员可以识别格式字符串的各个组件,则这真的更可读吗?
赞助
赞助
赞助
赞助
从上一个显示帖子:   
   指数 -> 编程,一般编程 -> 功能规划
查看上一个主题 告诉一个朋友可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题

11  [ 1 Posts ]
跳到:   


Style:  
搜索: