我正在玩FRP,并且想知道应该如何公开处理事件"发生"的行为.通过这个,我的意思是程序员应该能够在FRP上下文中执行以下操作:
event.occur(now, 5)
Run Code Online (Sandbox Code Playgroud)
我从未在任何FRP论文中看到这样的例子,对我来说感觉不对.我觉得FRP框架应该真正隐藏这种类型的动作,并且事件的发生应该仅在幕后发生.我在想这个是正确的吗?
为了澄清,我的方法是"发生"只能由Event类本身访问.如果需要某些外部源的抽象(例如鼠标),可以通过扩展Event类来构建.通过这种方式,所有处理事件创建的逻辑都被抽象出来了.
haskell programming-languages functional-programming scala frp
我正在使用一个单独的开关案例,它将使用超过100个案例.有没有限制?
案例的用法是针对我的AutoCompleteTextView,android教程的建议.
以下是我的代码的一部分,忽略Badrul.class,稍后将更改它们.
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Toast;
public class Search extends Activity
{
public void onCreate(Bundle savedInstanceSate)
{
final AutoCompleteTextView autoComplete;
super.onCreate(savedInstanceSate);
setContentView(R.layout.searchshop);
autoComplete = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, shops);
autoComplete.setAdapter(adapter);
autoComplete.setThreshold(1);
autoComplete.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3)
{
int index=999;
for(int i=0;i<shops.length;i++)
{
if(autoComplete.getText().toString().trim().equals(shops[i]))
{
index=i;
break;
}
}
switch(index)
{
case 0: …
Run Code Online (Sandbox Code Playgroud) 是否存在编程语言(可能是概念或研究论文),它允许对函数/方法参数值进行多态化?的种类:
function factorial(int value > 0){ /* code here */}
function factorial(int value == 0){ /* code here */}
function factorial(int value < 0){ /* code here */}
Run Code Online (Sandbox Code Playgroud)
而且,这种多态性的官方名称(如果有的话)是什么?
language-agnostic polymorphism programming-languages language-design
我正在使用Jison构建一个简单的计算器语言,其中包含变量.我希望这些变量与JavaScript类似,即您必须var
首次使用关键字对其进行初始化.在我的语言中,如果变量重新初始化,我想显示错误.
var myVar = 4
var myVar = 3
// Error, cannot reinitialise variable myVar on line 2
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何获取AST节点的行号?在我的语法文件中,我可以将解析器中的行号传递给我的AssignVariable
对象,但我想知道是否有更好的方法来执行此操作?
stmt
: 'PRINT' expr
{ $$ = new yy.Print($2) }
| 'VAR' 'IDENTIFIER' 'ASSIGN' expr
{ $$ = new yy.AssignVariable($2, $4, $3); $$.lineNo = yylineno }
| 'IDENTIFIER' 'ASSIGN' expr
{ $$ = new yy.SetVariable($1, $3, $2) }
;
Run Code Online (Sandbox Code Playgroud)
我还需要编译器中其他节点的行号用于其他类型的错误检查.
从这个问题中得到的更高级别的内容可能是:使用Jison(或类似版本)检测和处理编译时错误的最佳方法是什么?
我正在研究c#中的应用程序.为了使这个应用程序工作,我发现自己做了一些对我选择的语言感到非常不自然的事情.在经历了许多重构和改进后,我逐渐意识到我试图实现的功能实际上是一种"懒惰评估"(我认为).这就是我想要的......
// Criteria 1: Lazy evaluation of expressions
int x = LazyEvaluated.New<int>();
int y = LazyEvaluated.New<int>();
int z = LazyEvaluated.New<int>();
z.Assign(x + y);
Assert.ThrowsException(z.Evalutate());
x.Assign(1);
Assert.ThrowsException(z.Evalutate());
y.Assign(2);
Assert.Equals(3, z.Evaluate());
x.Assign(3);
Assert.Equals(5, z.Evaluate());
// Criteria 2: Referencing relative to parent object
Car myCar = LazyEvaluated.New<Car>();
Engine engineInMyCar = LazyEvaluated.New<Engine>();
double displacementOfMyEngine = LazyEvaluated.New<double>();
engineInMyCar = myCar.Engine;
displacementOfMyEngine = engineInMyCar.Displacement;
Car subaru = new Car(new FlatFourEngine());
Car falcon = new Car(new InlineSixEngine());
myCar.Assign(subaru);
Assert.IsTypeOf<FlatFourEngine>(engineInMyCar.Evaluate());
Assert.IsEqual(2.0, displacementOfMyEngine.Evaluate());
myCar.Assign(falcon);
Assert.IsTypeOf<InlineSixEngine>(engineInMyCar.Evaluate());
Assert.IsEqual(4.0, displacementOfMyEngine.Evaluate());
Run Code Online (Sandbox Code Playgroud)
这些是我用于说明的简单类定义......
public …
Run Code Online (Sandbox Code Playgroud) 将UML视为DSL是否合适?
我知道每个人都认为UML是绘制图片的一种方式,但是UML图的"视图"底层有一个模型......而UML中的"L"代表语言.
另一个问题 - SysML是DSL吗?
与C/CPP/CSharp/JScript一样,我们如何在VBA中进行链式赋值?换句话说,VBA是否具有赋值运算符的右关联性?
例如在C-sharp和JavaScript中,我们可以使用:
var alpha, bravo, charlie;
alpha = bravo = charlie = "hello";
Run Code Online (Sandbox Code Playgroud)
现在在VBA中编写此表达式必须:
Dim alpha, bravo, charlie
alpha = "hello"
bravo = "hello"
charlie = "hello"
Run Code Online (Sandbox Code Playgroud)
但我们不能使用:
Dim alpha, bravo, charlie
alpha = bravo = charlie = "hello"
Run Code Online (Sandbox Code Playgroud)
VBA不允许折叠表达式.还有其他办法吗?
如果问题看起来有点宽泛或奇怪,请提前道歉,我并不是要冒犯任何人,但也许有人可以提出建议.我试着寻找类似的问题,但冷却不是.
哪些是可以教授优化代码的更好的资源(书籍,博客等)?
有很多资源可以使代码更易于阅读(Code Complete可能是第一选择).但是让它运行得更快,内存效率更高呢?
当然,每种特定语言都有很多书籍,但我想知道是否有一些内容涵盖了内存/操作速度的问题,并且在某种程度上与语言无关?
我正在对Scala中的Arrays进行分析.我正在按照一本书(Robert W. Sebesta的编程语言概念)进行这种分析.根据该书,有五类数组,基于对下标范围的绑定,对存储的绑定以及存储分配的位置.类别是:
静态数组:其中下标范围是静态绑定的,并且存储分配是静态的(在运行时之前完成).静态数组的优点是效率:不需要动态分配或释放.缺点是阵列的存储在程序的整个执行时间内是固定的.
fixed stack-dynamic array:下标范围是静态绑定的,但分配是在执行期间的声明详细时间完成的.固定堆栈动态阵列优于静态阵列的优点是空间效率.只要两个子程序同时不活动,一个子程序中的大数组就可以在不同的子程序中使用相同的空间作为大数组.如果两个阵列位于同时不活动的不同块中,则情况也是如此.缺点是所需的分配和释放时间.
stack-dynamic array:在精化时动态绑定下标范围和存储分配的数组.但是,一旦下标范围被绑定并且分配了存储,它们在变量的生命周期内保持固定.堆栈动态阵列优于静态和固定堆栈动态阵列的优势在于灵活性.在即将使用阵列之前,不需要知道阵列的大小.
固定堆动态数组:类似于固定堆栈动态数组,因为下标范围和存储绑定在分配存储后都是固定的.区别在于下标范围和存储绑定都是在用户程序在执行期间请求它们时完成的,并且存储是从堆而不是堆栈分配的.固定堆动态数组的优点是灵活性 - 数组的大小始终适合问题.缺点是来自堆的分配时间比堆栈的分配时间长.
heap-dynamic array:下标范围和存储分配的绑定是动态的,并且在数组的生命周期内可以更改任意次数.堆动态数组优于其他数组的优点是灵活性:随着空间需求的变化,数组可以在程序执行期间增长和缩小.缺点是分配和解除分配需要更长的时间,并且可能在程序执行期间多次发生.以下段落给出了五个类别的示例.
我偶然发现了常规的++并发现它非常有趣.
不幸的是,它似乎没有进一步发展?
该项目是否已移动并且现在有另一个名称?由于改进了groovy,它是否已经过时了?还是刚刚停产?
感谢您的任何见解!