vala - 我如何将该程序从 Vala 翻译为 Genie?

标签 vala genie

我猜有引用资料和一些示例,但我的 Google 功能失败了,Genie 的文档页面也失败了。

让我们举一个非常具体的例子,来自 there 的一些 Vala 代码:

using GLib;
using Gsl;

public class Test : GLib.Object
{
        public static void main (string[] args)
        {
                double[] a_data = new double[] { 0.18, 0.60, 0.57, 0.96,
                                                 0.41, 0.24, 0.99, 0.58,
                                                 0.14, 0.30, 0.97, 0.66,
                                                 0.51, 0.13, 0.19, 0.85 };

                double[] b_data = new double[] { 1.0, 2.0, 3.0, 4.0 };

                MatrixView m = MatrixView.array (a_data, 4, 4);
                VectorView b = VectorView.array (b_data);

                Vector x = new Vector (4);

                int s;

                Permutation p = new Permutation (4);

                LinAlg.LU_decomp ((Matrix)(&m.matrix), p, out s);
                LinAlg.LU_solve ((Matrix)(&m.matrix), p, (Vector)(&b.vector), x);

                stdout.printf("x = \n");
                Vector.fprintf(stdout, x, "%g");
        }
}

以下是我尝试将该程序转换为 Genie 的方法:

[indent=4]

uses Gsl

init
    a_data: array of double = { 0.18, 0.60, 0.57, 0.96,
                                0.41, 0.24, 0.99, 0.58,
                                0.14, 0.30, 0.97, 0.66,
                                0.51, 0.13, 0.19, 0.85 }
    b_data: array of double = { 1.0,  2.0,  3.0,  4.0 }

    var m = Gsl.MatrixView.array(a_data, 4, 4)
    var b = Gsl.VectorView.array(b_data)

    var x = new Gsl.Vector(4)

    s:int = 0

    var p = new Gsl.Permutation(4)

    Gsl.LinAlg.LU_decomp(m, p, out s)
    Gsl.LinAlg.LU_solve(m, p, b, x)

    print "x =\n%g", x

这应该是正确的 this reference .

但是失败了:

LA.gs:12.28-12.32: error: syntax error, expected identifier
    var m = Gsl.MatrixView.array(a_data, 4, 4)
                           ^^^^^
LA.gs:13.28-13.32: error: syntax error, expected identifier
    var b = Gsl.VectorView.array(b_data)
                           ^^^^^
Compilation failed: 2 error(s), 0 warning(s)

那么,有人可以向我解释一下这个特定错误的含义吗? Genie 上下文中的标识符是什么?

在 Genie 中调用此类静态方法的正确方法是什么?

最佳答案

array是保留关键字,因此必须在保留关键字前面添加@符号:

var m = Gsl.MatrixView.@array(a_data, 4, 4)
var b = Gsl.VectorView.@array(b_data)

打印行也不正确,我已经修复了大部分问题:

[indent=4]

uses Gsl

init
    a_data: array of double = { 0.18, 0.60, 0.57, 0.96,
                                0.41, 0.24, 0.99, 0.58,
                                0.14, 0.30, 0.97, 0.66,
                                0.51, 0.13, 0.19, 0.85 }
    b_data: array of double = { 1.0,  2.0,  3.0,  4.0 }

    var m = Gsl.MatrixView.@array(a_data, 4, 4)
    var b = Gsl.VectorView.@array(b_data)

    var x = new Gsl.Vector(4)

    s:int = 0

    var p = new Gsl.Permutation(4)

    Gsl.LinAlg.LU_decomp((Matrix) m, p, out s)
    Gsl.LinAlg.LU_solve((Matrix) m, p, (Vector) b.vector, x)

    stdout.printf("x =\n")
    Vector.fprintf(stdout, x, "%g")

这仍然无法编译,因为 LU_ 方法需要类型转换,我不能 100% 确定如何执行。

更新:此代码可以编译并运行,但我不知道它是否真的正确:

[indent=4]

uses Gsl

init
    a_data: array of double = { 0.18, 0.60, 0.57, 0.96,
                                0.41, 0.24, 0.99, 0.58,
                                0.14, 0.30, 0.97, 0.66,
                                0.51, 0.13, 0.19, 0.85 }
    b_data: array of double = { 1.0,  2.0,  3.0,  4.0 }

    var m = Gsl.MatrixView.@array(a_data, 4, 4)
    var b = Gsl.VectorView.@array(b_data)

    var x = new Gsl.Vector(4)

    s:int = 0

    var p = new Gsl.Permutation(4)

    mp : MatrixView* = &m
    vp : Vector** = &(b.vector)

    Gsl.LinAlg.LU_decomp((Matrix) mp, p, out s)
    Gsl.LinAlg.LU_solve((Matrix) mp, p, (Vector) vp, x)

    stdout.printf("x =\n")
    Vector.fprintf(stdout, x, "%g")

关于vala - 我如何将该程序从 Vala 翻译为 Genie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38356442/

相关文章:

segmentation-fault - 使用 Vala 自定义 GTK 小部件

java - 如何将Balistica lib(.vala)导入Android Studio

vala - Gee HashMap 包含方法作为值

linux - 在 Vala 项目中制作文档的正确方法

vala - Flatpak Meson 没有从 Gnome Builder 中找到 Vala 库

gtk3 - UI xml 文件中的 Gtk HeaderBar ActionBar pack_start pack_end

不推荐使用Gtk.stock,还有什么选择?

c - 如何使 Vala 在我的 NetBeans IDE 中可用于自动完成或 Vala 还可以使用什么来实现自动完成?