- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 scala 的新手,这更像是一个好奇的问题。
假设我有一个类
class Container()
{
def add(item: Item) ...
}
我可以这样调用它:container add item
。我想知道如何将此调用变成类似英语的 add item to container
?它可能会违反风格指南,但正如我所说,我只是好奇。
最佳答案
因为我喜欢好的挑战,所以我尝试了如果您滥用 Scala 必须提供的几乎所有危险和/或实验性功能,您是否无法到达您想要的地方,结果证明这是可能的:
scala> :pa
// Entering paste mode (ctrl-D to finish)
import scala.language.dynamics
import scala.language.postfixOps
import scala.language.experimental.macros
import scala.reflect.macros.blackbox.Context
case class Item(i: Int)
class Container { var item: Item = null; def add(i: Item) = item = i }
object to
object add extends Dynamic { def applyDynamic(item: String)(a: to.type) = new AddContainer}
class AddContainer extends Dynamic { def selectDynamic(container: String): Unit = macro addMacro }
/**
* Don't try this at home: not a foolproof macro!
*/
def addMacro(c: Context)(container: c.Tree): c.Tree = {
import c.universe._
val Literal(Constant(containerName: String)) = container
val q"$_.applyDynamic($item)($_)" = c.prefix.tree
val Literal(Constant(itemName: String)) = item
q"${TermName(containerName)}.add(${TermName(itemName)})"
}
// Exiting paste mode, now interpreting.
scala> object Test {
| val item = Item(1)
| val container = new Container
| println(container.item)
|
| add item to container
|
| println(container.item)
| }
defined object Test
scala> Test
null
Item(1)
让我们把它分解成可以理解的部分。
您想编写 add item to container
,它被解析为 add.item(to).container
。实现的后果是:
container
用作后缀运算符。item
和 container
都在方法调用位置,但我们希望它们引用当前范围内的变量。为了克服这个问题,我们需要结合两个特性:
Dynamic
我们可以将 a.b(c)
转换为 a.applyDynamic("b")(c)
并将 a.b
转换为 a.selectDynamic( “b”)
。因此,方法名称变成了我们可以动态处理的字符串。String
文字,将它们转换为 TermName
并输出一个新的语法树,看起来像 container.add(item)
.为简单起见,此宏仅适用于最微不足道的情况。要使它可靠地工作可能需要付出更多的努力。并且非常清楚:这只是为了回答“需要什么”的问题。我怀疑是否有一个用例可以证明实际这样做是合理的。然而,此处使用的技术可能适用于一些非常高级但有效的用例。
关于斯卡拉 DSL : invocation that mimics English,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51965278/
我正在开发一个程序,可以将星球大战中的自然英语转换为尤达风格的英语。单个句子转换看起来不错,但当涉及多个句子时我遇到了问题。这是我的代码。 public class Yodify{ publi
是否有任何正则表达式模式可以改变这个字符串 This is a mix string of üößñ and English. üößñ üößñ are Unicode words. 为了这个? T
我打算发布一个社区网站,该网站的主要受众不是英语。这意味着指向/profile/forums 等的 URL 将是英文的,而不是他们的母语。我不关心用户是否在访问不同的英文 URL 路径时使用该网站,但
我正在处理包含英文和中文字符的字符串。我想挑出每个英语单词、非英语字符,例如法语、中文等,数字和特殊字符,例如“@#$%^&>?”以便进一步操作。 所以我累了 var nregex = /[^\u00
我在 Android-Chrome 上使用语音合成 API。问题是尽管有 4 种英语语音可用,但无论代码指定什么,浏览器始终使用美国英语。我可以使用其他语言,例如法语,而不是其他英语语音,例如 en-
我在英国,我有一个在英国购买的 Windows 7 版本,我可能找到的所有设置都设置为英国(而非美国)。当我运行以下代码时: Console.WriteLine(Thread.CurrentThrea
我在 MySQL 数据库表中有一个文本字段,其文本值混合了英文和非英文条目(假定以字母开头的字符串被视为英文)。 我想对值进行排序并在 HTML 下拉框中使用它。数据示例: Banana Apple
我有一个 html 如下 pomme English
我需要在 Android 设备中选择当前语言。当我使用以下代码时: Log.v("Language: ", Locale.getDefault().getDisplayLanguage()); Log
快速提问:我需要允许输入只接受从 a 到 z 和从 A 到 Z 的字母,但找不到任何表达式。我想使用 javascript test() 方法。 最佳答案 let res = /^[a-zA-Z]+$
我有一个字符串,其中可能使用了多种语言,例如: این متن فارسی است and this is !!! in English این خط بعدی است و this is going
我只是在使用这个最有用的链接:How do I check if a given string is a legal / valid file name under Windows? 在一些验证代码中
我喜欢加入一个数组,生成一个“英文列表”。例如 ['one', 'two', 'three'] 的结果应该是 'one, 2 and three'。 我写了这段代码来实现的(假设数组不为空,我的情况不
您好,请问有人可以将以下代码行翻译成英文吗? "foo".TrimEnd(New Char(0 - 1) {}) 我知道 TrimEnd 会做什么,但不知道 Char 位。 最佳答案 您发布的代码在
关闭。这个问题需要多问focused 。目前不接受答案。 已关闭10 年前。 已锁定。这个问题及其答案是locked因为这个问题是题外话,但却具有历史意义。目前不接受新的答案或互动。 有人可以用简单的
我正在尝试从Common Crawl阅读“英语”网页。我正在Amazon界面中运行这些Hadoop作业。请看下面的代码,那是Mapper的一部分。我没有 reducer 。 #!/usr/bin/ph
我是 scala 的新手,这更像是一个好奇的问题。 假设我有一个类 class Container() { def add(item: Item) ... } 我可以这样调用它:contain
{ "Actor": { "knownlanguages": [ "English" ] } } 此 JSON 存储在 MySQL 的 JSON columntyp
我有一个遗留类,其中包含 toLowerCase( Locale.ENGLISH ) 当我在客户端使用这个类时,我得到 [ERROR] [onboardingtool] Line 37: The me
我发现我可以应用属性 direction: rtl 来强制从右到左对齐: https://www.w3.org/International/questions/qa-html-dir 它还提到 HTM
我是一名优秀的程序员,十分优秀!