- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果有人能解释为什么在 Smalltalk 中,表达式会很好
class := Class new
name: 'OurClass';
superclass: Object
不适合创建新类。更准确地说,当像 class
这样的对象试图充当普通类时,什么是错的,什么是对的?它可以创建实例吗?它可以编译方法吗?它不能做什么?
最佳答案
您没有指定您使用的是哪种 Smalltalk 方言(例如,这在 Squeak 或 Cuis 中不起作用),但我假设它是 Pharo,因为它在那里执行时没有错误。在 Pharo 中,它实际上似乎确实创建了一个令我感到惊讶的新类......在其他 Squeak 方言中,我认为它甚至不会远程执行您想要的操作。所以第一个问题是它不标准,但这相对较小......
在本次讨论中,我们假设您的示例代码在 Smalltalk 方言中得到支持,并且完全按照您的意愿执行:创建一个新类 OurClass 作为 Object 的子类。更大的问题是您创建的本质上是一个与 Smalltalk 环境的其余部分断开连接的孤岛,因为您已经绕过了所有 Smalltalk 元数据/元结构。所以你不能做像打开浏览器窗口并找到“OurClass”这样简单的事情……Smalltalk 的其余部分不知道它。 OurClass new
这样的东西是行不通的。您的新类也没有根目录,因此如果您从示例中丢弃 class
变量,该类就会消失。这也意味着它不会成为任何包的一部分,并且您的类定义不会与源代码的其余部分一起保存。由于以这种方式做事,您可能会遇到其他惊喜(即调试器可能会阻塞等)因此对于通用类创建需求,它有什么问题?几乎所有内容。
也就是说,在一个用例中,您可能合法地希望以这种方式创建类:metaprogramming .一个有效的元编程用例是创建一个匿名类,您恰好需要这种“断开连接”的行为类型,并且临时/内部需要一个类,但不希望其他人看到/使用它Smalltalk 环境。只要你真的想要并且需要以这种方式做事,我认为它没有问题。有几次我需要这样的东西(从来没有完全这样做过,但是很接近)我一定会很好地记录它,因为这不是那种你可能会在 6 个月后记住的东西做或为什么......更不用说另一个程序员了。对于您有特定需求的元编程,这是完成这项工作的正确工具,它有什么好处?几乎所有内容。
关于metaprogramming - Class 实例有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52739642/
我想在宏内部构建一个带有关键字参数的构造函数,并且第一个关键字参数需要用于表达式。我无法将该表达式放入表达式中。这就是我的意思。说我有一个类型 type Test ex end 其中包含一个表达式
在最长的时间里,我想设计一种将可扩展性与效率(以及安全性,易用性等)结合在一起的编程语言,最近我重新发现了D,我想知道D 2.0是否真的是我想使自己成为自己的语言? 。我最喜欢的是元编程的潜力。从理论
我正在尝试在coffee脚本中动态创建方法,但是如我的代码所示,用于创建方法的迭代器不会在两次迭代之间重置其变量,因此我遇到了冲突的共享变量: class MyClass constructor:
我正在尝试使用元编程创建一个函数来计算方程组的残差。 这是我到目前为止尝试过的(玩具示例): function syst!(x::Vector, ou::Vector) for i in 1:
我对 Julia 很陌生,所以对于我可能对语言的任何误解,我深表歉意。我最近主要使用 Python,并大量使用 SymPy 及其代码生成功能,看起来 Julia 及其元编程功能是专为以我喜欢的风格编写
有人可以清楚地说明在Julia中可用于元编程的各种报价机制,并用一个最小的例子来说明每个报价机制吗? 这样就很清楚在哪种情况下使用哪个... 据我所知: :(someExpr; maybeMore)
如何动态地向类添加属性?我尝试了此方法,但是它提示缺少方法,因此我不确定为什么,因为我没有尝试添加方法。 use v6.d; class Foo does Metamodel::AttributeCo
我最近遇到了Polymorphic Code一词,想知道是否有人建议使用合法的(即在法律和商业适用软件中)在计算机程序中使用它的理由?链接到现实世界的例子,将不胜感激! 在有人回答之前,请告诉我们有关
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我已经按照 SO 问题的答案中的说明进行操作 How can classes be made parametric in Perl 6? .但是,我遇到了一些软障碍。我正在尝试使用类型捕获键入内部类的
我正在阅读 TheServerSide 上的一篇文章 ployglot programming on the Java platform 。文章中的一些评论将元编程称为生成代码的能力(可能是动态生成的
我们都知道MetaProgramming是代码==数据(或编写程序的程序)的概念。 但是,有没有使用它的应用程序?使用它的好处是什么? 该问题可以关闭,但我没有看到任何相关问题。 最佳答案 IDE充满
假设我有一个映射(具有已知类型),例如 1:错误,4:假的,8:是的,16:真 我想生成一个接受输入并给出正确输出的函数。我不关心不在上述映射中的任何输入会发生什么,例如 3 永远不会被期望。 例如,
我正在寻找 Julia 中与 Matlab 相媲美的一些功能 save('myfile.mat', 'myvar1', 'myvar2') 比如使用HDF5.jl,很容易做到 @write filen
我只是出于好奇问这个: 是否有任何工具可以自动将具有合理复杂性的源代码从一种语言转换为另一种语言? 有没有可以编译成其他几种语言的“元语言”?例如 CoffeeScript 编译成 Javascrip
所以元编程——你可以在运行时修改类/对象,注入(inject)新的方法和属性的想法。我知道它对框架开发有好处;一直在使用 Grails,并且该框架在运行时为您的类添加了一堆方法。您在 User 对象上
如果有人能解释为什么在 Smalltalk 中,表达式会很好 class := Class new name: 'OurClass'; superclass: Object 不适合创建新类。更
我的模块中有三个相同的方法,它们(几乎)做同样的事情。我没有重复函数定义,而是尝试定义它们一次,以使所有代码都保持最小和相同。 到目前为止,我已经尝试使用 Code.eval_string : def
假设我想用一个宏覆盖每个函数调用,该宏计算我调用每个特定函数的次数。 在 Elixir 中可能吗? 我知道有可能覆盖内置宏和函数 import Kernel, except: [name: arity
假设我制作了这个简单的字符串宏 macro e_str(s) return string("I touched this: ",s) end 如果我将它应用于带有插值的字符串,我 获得: ju
我是一名优秀的程序员,十分优秀!