Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 隐式主题可以用一种语言干净地实现吗?_Php_Perl_Language Design_Implicit - Fatal编程技术网

Php 隐式主题可以用一种语言干净地实现吗?

Php 隐式主题可以用一种语言干净地实现吗?,php,perl,language-design,implicit,Php,Perl,Language Design,Implicit,我觉得很无聊,所以我开始用Perl5.14编写自己的HTML模板语言,因为我可以 这个问题是关于特定特性的解析器实现和特定语言构造的可行性,这在语言中是罕见的 编辑:残酷和完全不必要的评论PHP删除的要求 编辑2:变成一个更客观的问题 PHP在动态处理HTML方面的简单性是一个优势,尽管任何50000行框架用户可能会这样说 不管怎样,我一直在思考在这样一种语言中隐式主题是如何工作的。Perl通过$\实现了它们,但它们有点令人讨厌——它们是不一致的,SUB必须通过原型明确允许它们,它们通过引用变量

我觉得很无聊,所以我开始用Perl5.14编写自己的HTML模板语言,因为我可以

这个问题是关于特定特性的解析器实现和特定语言构造的可行性,这在语言中是罕见的

编辑:残酷和完全不必要的评论PHP删除的要求

编辑2:变成一个更客观的问题

PHP在动态处理HTML方面的简单性是一个优势,尽管任何50000行框架用户可能会这样说

不管怎样,我一直在思考在这样一种语言中隐式主题是如何工作的。Perl通过$\实现了它们,但它们有点令人讨厌——它们是不一致的,SUB必须通过原型明确允许它们,它们通过引用变量向用户公开,更不用说必须找出哪些内置使用它们,哪些不使用它们

我所说的是将隐式主题的概念直接连接到语言中,使用一些非常明确的规则。例如,所有迭代构造都为每个元素分配它,闭包将它用于第一个参数(一种让Ruby do block优雅的简单方法)

现在,关键点是:不要定义默认的“it”变量,只需定义严格的语义,其中默认主题是推断出来的,而不是推断出来的。例如,参数比预期少一个的函数将使用它作为第一个参数。或者别的什么。您不通过变量公开主题,而是通过语言公开主题

在Lisp或Ruby这样的语言中,这是很难做到的,因为他们不喜欢像循环这样的语言级结构,更喜欢自己的方式,不管是宏还是块+方法

但是在一种包含像Perl这样的语言连接结构的语言中,这可能非常有效

但是,还有一件事,如果有一个新的话题正在讨论,这种语言会强迫你明确地引用一些东西。例如,如果您有一个For循环,那么内部循环的主题将是它自己的当前元素,而不是外部的当前元素。Perl用户已经这样做了,但是其他语言用户可能不熟悉这个概念

那么,隐式主题是否可以干净地实现到一种语言中,使用限定范围的主题,在模棱两可时强制编码器显式

这在英语中是有道理的。我们将话题转移到了次主题,我们讨论了其他一些事情,然后我们将范围“向后延伸”到“超级”主题,然后明确这个主题是我们之前讨论过的。然后,它会自动再次表示“超级”主题。我们的演讲是动态范围


另外,对于我来说,最好的方法是什么来解析它呢?

在编程语言中有不同层次的隐式主题

在最小的方面,在方法中有Javascript的
this
设置和Ruby的
self
设置

在另一个极端,您可以使用像J这样的语言,其中每个字符都强制执行隐式循环其应用数据的操作

中间的某个地方是Perl这样的语言,它提供了许多隐含的动作,但也允许你明确地表达你所需要的任何东西。 Perl的所有foreach构造(foreach循环、map、grep)都使用

$\uuu
作为主题变量。默认情况下,许多内置程序依次使用
$\uuu
。子例程使用
@
作为主题变量,默认情况下,一些内置函数使用
@


我建议您花更多的时间学习如何在Perl中使用主题化器和上下文来消除无关和冗余的语法。因为据我所知,您正在寻找的所有功能都已经是Perl的一个功能,这取决于您是否正确使用这些功能,并约束自己不要使用与此目标背道而驰的功能(毕竟这是一种大型语言,并非所有功能都是为简洁代码而设计的)。

除了PHP“备注”之外这实际上并没有给你的“问题”带来任何东西,你是在明确地询问关于主观主题的意见,这在这里是离题的。我还问了如何实现这样一个概念的解析器。所以你错了。PHP是一个笑话——尽管我非常喜欢perl,但我也经常拿perl的可读性开玩笑。我认为PHP的评论有点太多了,但这可以缩短,变成一个真实、客观的问题。NullUserException:好的,可以。我想我的完全过度的反对并不适合所有人。然后重新表述你的整个想法,删除PHP引用,并使你的问题具体化。如何实现解析器是一个非常广泛的问题(也是非常困难的话题)。删除“代码可读性”的东西,这只是主观的。删除“发表你的想法”类型的东西,那些是需要讨论的。我写一种语言只是为了练习,我不是为了任何严肃的理由写一种新的语言,也不是试图替换任何东西。我是用Perl写的,所以我知道Perl是如何做到的,事实上,正是Perl启发了这篇文章。是的,我知道主题化程序是如何在Perl中工作的,但我认为它们一点也不好用。$变量与内置函数的使用严重不一致,它还需要显式原型化的sub,以便通过uuprototype元素正常工作。更不用说它在面向对象编程中表现得不好,因为Perl中的间接对象访问功能被削弱了。我只想补充一点,我认为一种语言要认真对待主题化领域,就需要将它连接到语言的规则中,不要让它成为一个具有全局变量和特定内置规则以及具有特定原型的特定SUB的特例。尽管Perl做了很多尝试,但它在Perl中并不是天衣无缝的。事实上,您必须明确提到$uu,这表明它本可以做得更好。一个使用动态范围来引入新主题和恢复旧主题的主题系统怎么样,