我最近通过阅读SICP开始学习Scheme.在开篇章节中,它涉及条件,并谈到else在cond"特殊形式"中使用 - 我的理解被定义为"解释器"只知道".我的问题,为什么被else定义为"特殊形式"而不是一个程序?
如果我启动我的mit-scheme解释器,并键入:(else 1)它会引发错误.如果我定义类似的东西(define (myelse x) x),我可以cond像在表达式中使用它一样使用它:
(define (abs x)
(cond ((< x 0) (- x))
(myelse x)))
Run Code Online (Sandbox Code Playgroud)
那么为什么被else视为特殊的东西,而不是在方案本身中定义?
我主要是一名PHP开发人员,最近我开始研究Go.在PHP中,我可以这样做:
<?php
class TestClass {
public function testMethod() {
echo "Hello!\n";
}
}
$obj = new TestClass();
$method_name = "testMethod";
$obj->{$method_name}();
?>
Run Code Online (Sandbox Code Playgroud)
输出是:Hello!.
我知道以下不是一个完美的比较,因为Go没有类,但我想知道我是否可以在Go中使用模块的导出属性做类似的事情.例如这样的事情(我明白这是无效的Go代码):
package main
import "fmt"
func main() {
name := "Println"
fmt[name]("Hello!")
}
Run Code Online (Sandbox Code Playgroud)
无论如何这可能吗?如何才能完成类似的事情呢?谢谢.
编辑:将"模块"更改为"包",因为这是我在Go中所指的正确名称