问题标签 [callbyname]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 具有非默认构造函数参数的 Scala 类单例
我已经阅读了关于从伴随类继承的对象的问题。
例如:
但我有一点不同的问题(我不确定这是一个错误)
我有以下代码:
请注意,我使用的是在伴随对象范围内定义的变量,然后将其传递给 super 的构造函数。
我收到以下编译错误:
我尝试过的其他变体:
按姓名呼叫:
命名参数:
两个都:
一些环境细节:
- 爪哇:
java version "1.8.0_144"
- 爪哇:
javac 1.8.0_144
- 斯卡拉:
Scala code runner version 2.12.3
- 斯卡拉克:
Scala compiler version 2.12.3
- 操作系统:
Darwin ***.local 17.0.0 Darwin Kernel Version 17.0.0: Thu Aug 24 21:48:19 PDT 2017; root:xnu-4570.1.46~2/RELEASE_X86_64 x86_64
更新:
对于有兴趣解决此问题的任何人:
scala - 使用按名称参数转换为元组
我想创建一个具有以下签名的函数:
这样我就可以这样称呼它,例如:val x = myFunction("abc" -> 4 * 3)
. 但是,Tuple 不接受 by-name 参数,因此上面的签名是无效的。
受这个答案的启发,我尝试了以下隐式转换:
但是,隐式在这种情况下不起作用(与链接答案不同)。
- 为什么隐式转换
ByName
不起作用? - 如何实现调用
myFunction("abc" -> 4 * 3)
where4 * 3
is pass by name 的预期效果?
semantics - 按需要调用和按名称调用减少关系语义
在尝试总结我对 lambda 演算的知识时,我了解到我对按值调用非常熟悉,但我从未见过按需要减少语义。我知道定义,但很高兴看到确切的含义。
这就是我对按需调用和按值调用的内容(不是很详细的描述):
按值调用
小步
价值观
β-还原
评估上下文
Big Step(带闭包和环境)
闭包
环境
减少
点名
小步
β-还原
评估上下文
估计还有一大步,肯定和call-by-value很像,不过还是再看一次比较好。
因此,如果有人可以根据需要扩展我的列表,我将不胜感激。
callbyname - a+=2 和 a=a+2 的执行有什么区别?
在哪种参数传递技术中,对 increment(b) 的调用与对 assign(b) 的调用具有不同的效果
1)按值调用 2)按值调用结果 3)按引用调用 4)按名称调用
java - 在 java 或 c++ 中使用“按名称调用”调用此函数的结果和示例是什么?
我刚刚为我的编程语言课做了一个测验,遇到了这个问题:
假设按名称调用,以下代码的结果是什么:
上面的代码和我的测验完全一样,但当时是在纸上,所以我手动进行了计算并得到了结果3.0, 90.0, and 3600.0
。在自己的电脑上运行代码后,结果和我计算的一样。
但是,问题是多项选择,最接近的可用选项是3.0, 90.0, and 4400.0
. 这使我假设“按名称调用”一词改变了该函数f
的在线调用方式System.out.println(f((a[i] *b[i]), i));
有人可以解释一下 4400.0 在 Java 或 C++ 中是如何实现的吗?
vb6 - callbyname vb6 使用字符串作为参数
我正在尝试通过使用 CallByName 和对象循环将某些图像的可见性设置为 false。
这是代码
它在“”上引发错误“TYPE MISMATCH CallByName **theobj_str**...
”
CallByName 将对象作为其第一个参数。我需要以某种方式将字符串“theobj_str”转换为对象。我怎样才能做到这一点 ?
如果我这样称呼它,CallByName 就可以正常工作:CallByName Images2, "Visible", vbLet,False
谢谢
python - Python中的非严格按名称参数?
问题
有没有办法将函数参数声明为非严格的(按名称传递)?
如果这不能直接实现:是否有任何辅助函数或装饰器可以帮助我实现类似的目标?
具体例子
这是一个可以试验的小玩具示例。
假设我想构建一个小型解析器组合器库,它可以处理以下带括号的算术表达式的经典语法(1
为简单起见,将数字替换为单个文字值):
假设我将解析器组合器定义为一个对象,该对象具有一个方法,该方法parse
可以获取令牌列表、当前位置,并且要么引发解析错误,要么返回结果和新位置。我可以很好地定义一个ParserCombinator
提供+
(连接)和|
(替代)的基类。然后我可以定义接受常量字符串的解析器组合器,并实现+
and |
:
到目前为止,一切都很好。然而,因为语法的非终结符号是以相互递归的方式定义的,我不能急切地展开所有可能的解析器组合树,我必须使用解析器组合器的工厂,并将它们包装成这样的东西:
这确实允许我以非常接近 EBNF 的方式写下语法:
它实际上有效:
但是,p(lambda: ...)
每一行都有些烦人。有没有一些惯用的方法来摆脱它?如果有人能以某种方式通过“按名称”规则的整个 RHS,而不触发对无限相互递归的急切评估,那就太好了。
我试过的
我已经检查了核心语言中可用的内容:似乎只有if
,and
并且or
可以“短路”,如果我错了,请纠正我。
我试过看看其他非玩具示例库是如何做到这一点的。
例如, funcparserlib 使用显式前向声明来避免相互递归(查看 github README.md 示例代码中的
forward_decl
andvalue.define
部分)。使用
parsec.py
一些特殊的@generate
的装饰器,并且似乎使用协程进行单子解析。这一切都很好,但我的目标是了解我对 Python 中可用的基本评估策略有哪些选择。
我还发现了类似的东西lazy_object_proxy.Proxy
,但它似乎并没有帮助以更简洁的方式实例化这些对象。
那么,有没有更好的方法来按名称传递参数并避免相互递归定义的值的爆炸?
language-design - 如果我的程序使用按名称调用,输出将如何?
所以这是我的代码,我知道按值调用的输出是
如果一种语言使用名称调用而不是值调用会怎样?
scala - Scala 的“按名称调用”能否被视为 Java8 功能接口 API 的语法糖?
Scala 的“call be name”示例:
Java结果:
Java 的功能接口 API 示例:
Java结果:
javap
考虑到上述两种情况的结果几乎相同,它们在内部评估的方式是否有任何重大差异
根据我目前的理解,它们都使用闭包并懒惰地评估表达式。如果理解有误请指正。
scala - Scala中“按名称调用”和Function0之间的区别
f: => R
和 和有什么区别f: () => R
?它们似乎以相同的方式工作,但它们的类型彼此不兼容。