作者Schelfaniel (Schelfaniel)
看板Ruby
标题Re: [连结] 松本行弘: Code 的世界~成为超级程式设 …
时间Mon Aug 10 09:14:17 2009
※ 引述《godfat (godfat 真常)》之铭言:
: : 演算法相同,但 Ruby 的看起来密度较低。Ruby 不需要明确给定型别,
: : 不必要的型别指定可以省略,因此可以较简洁。
: 这比较可能略嫌粗糙了点... XD
: static typing 与 dynamic typing 在本质上就不同了,
: 从这点出发的话,恐怕是需要比较 trade off.
: 或许可以从这边看出,Matz 并不太喜欢 static tying.
其实我觉得,会喜欢 dynamic typing 的人,
如果不是初学者,就真的是高手了,因为 dynamic typing 要写时,
考量的东西绝不比 static typing 来得少,
乱写的下场会比 static typing 更惨。
: : 若导入巨集功能,会引起严重的副作用,这里到底是函式呼叫,控制结构,
: : 还是要代入什麽,得再查文件才能知道。
: : 嗯,也许世界上也有不会为此所苦的 Lisp 程式人员,不过我认为这只是
: : 少数人。
: : 要能在世界上普及的程式语言,我相信必须要有「不为风所摇动的核心」
: : 的文法。
: 噢,原来原因是这个,那我完全能理解 XD
: 之前看 Lisp 就常常搞不清楚 macro 跟 function 之间的状态...
: 如果全部都是 function, 那很多事情就会变得一致了。
这个说法其实有一点奇怪,在 Lisp 里面,使用就直接使用了,
没有人会特别去在意这个人是巨集还是函式,
我举个例子好了,像是 or,其实 or 是从 if 衍生的,不难想像吧。
这边我先写只有两个参数的版本,其实完整的是 1 至 n 个参数都可以接受的。
(defmacro my-or [a b]
`(let [result# ~a]
(if result# result# ~b)))
完整版应该类似下面这样。
(defmacro my-or
([a] a)
([a b]
`(let [result# ~a]
(if result# result# ~b)))
([a b & c]
`(my-or (my-or ~a ~b) ~@c)))
像是这样,但是其实真正在用 or 的时候,
应该不会有人刻意去分辨它是不是巨集...
就像中文,外国人觉得不顺的话是他们不习惯的关系。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.29.28.137
1F:推 jenallen:推一本书Masterminds of programming,虽然无ruby... :P 08/10 09:47
2F:推 godfat:不熟没办法举实例,不回了 XD 08/10 11:18