小编Kev*_*ith的帖子

可以在FreePascal中的变体记录的案例中复制标识符吗?

这是我的问题:我想创建一个记录类型,其中在变体记录的情况下,一些(但不是全部)将具有某个字段.根据维基,这是完全合法的.然而,当我尝试编译以下代码时:

program example;

{$mode objfpc}{$H+}

uses sysutils;

type
  maritalStates = (single, married, widowed, divorced);

  TPerson = record
    name: record
      first, middle, last: string;
    end;
    sex: (male, female);
    dob: TDateTime;
    case maritalStatus: maritalStates of
      single: ( );
      married, widowed: (marriageDate: TDateTime);
      divorced: (marriageDate, divorceDate: TDateTime;
        isFirstDivorce: boolean)      
  end;

var
  ExPerson: TPerson;

begin
ExPerson.name.first := 'John';
ExPerson.name.middle := 'Bob';
ExPerson.name.last := 'Smith';
ExPerson.sex := male;
ExPerson.dob := StrToDate('05/05/1990');
ExPerson.maritalStatus := married;
ExPerson.marriageDate := StrToDate('04/01/2015');

end.
Run Code Online (Sandbox Code Playgroud)

编译失败,出现以下错误:

$ fpc ex.pas
Free …
Run Code Online (Sandbox Code Playgroud)

pascal freepascal record variant

7
推荐指数
1
解决办法
7976
查看次数

在gprbuild文件中设置--create-missing-dirs选项

有一个单独的目录来存储目标文件是有用的.但是,gprbuild如果该目录尚不存在,则会抱怨.我hg用于版本控制,它不允许你跟踪空目录(AFAIK也是如此git),但即使它确实如此,不幸的是必须用空目录来混淆存储库.gprbuild有一个选项,--create-missing-dirs(简短形式-p),它完全符合它在锡上的说法.这非常有用.但是,我想知道的是,是否有某种方法可以在.gpr文件中设置它.提醒我的用户使用该-p选项进行编译是令人讨厌的,而不是只能运行gprbuild project.不幸的是,这些文档gprguild有这样的说法:

默认情况下,GPRbuild检查项目文件中指定的对象,库和exec目录是否存在.Switch -p指示GPRbuild尝试创建丢失的目录.请注意,这些开关可以在主项目的包Builder中指定,但它们在那里是无用的,因为在评估Builder切换之前,目录已经存在或项目文件的处理失败,因为至少有一个缺失目录.

当然必须有办法做我所描述的事情?

ada gnat

5
推荐指数
1
解决办法
335
查看次数

自定义DCG操作员

假设我想编写一个自定义运算符来组合DCG规则,否则将会重复.

例如,假设我有一个DCG,ws这样:

ws --> [].
ws --> " ", ws.
Run Code Online (Sandbox Code Playgroud)

匹配零个或多个空格.显然,如果我想在我的语法中的每个标记之间有可选的空格,那么必须放在, ws任何地方都是令人讨厌的.

我可以定义一个新的运算符来替换,/2.

:- op(1000, xfy, [ -- ]).
:- meta_predicate --(*,*,?,?).
--(L,R) --> ({callable(L)} -> call(L); L), ws, ({callable(R)} -> call(R); R).
Run Code Online (Sandbox Code Playgroud)

--/2通过可选的空格规则加入左手和右手.这大多数工作正常,但有些事情绊倒了:

rule --> "foo" -- ("bar"; "quux").
Run Code Online (Sandbox Code Playgroud)

如果我尝试执行此规则,则会收到错误消息,说明;/4未定义.我对这个问题有一个模糊的概念,但基本上问题是:有没有办法为DCG定义具有相同通用性的新运算符,/2

prolog dcg

4
推荐指数
1
解决办法
55
查看次数

在 Jekyll 中如何获取页面文件名减去扩展名(即基本名)?

对于我的 Jekyll 网站,我在每个页面上生成 BibTeX 代码,以使其更易于引用。目前,我的模板如下所示:

<code>
    % BibTeX Code
    % Copy and paste the following code into your .bib file to cite this article:

    @online{
        title="{{ page.title | escape }}",
        author="{{ page.author | escape }}",
        organization="{{ site.title | escape }}",
        date="{{ page.date | date: "%Y-%m-%d" }}",
        urldate="{{ site.time | date: "%Y-%m-%d" }}",
        url="<!-- website domain name here -->{{page.url}}"
    }
</code>
Run Code Online (Sandbox Code Playgroud)

只有一个问题:对于那些了解 BibTeX 的人来说,我缺少一个条目名称。在我的代码中显示的位置之后@online{,我需要一个条目名称,用于引用 BibTeX 数据库中的条目。现在,对此有一定的限制,例如它不能包含空格。事实上,Jekyll 生成的 HTML 文件的名称就很完美了。然而,我不清楚如何获得这个名字。液体模板{{page.url}}会生成类似的东西/2017/02/22/my-page.html,但我想要的只是my-page.

jekyll

3
推荐指数
1
解决办法
1052
查看次数

在一定范围内执行加载的 Lua 文件

我使用 Lua 作为我的项目的配置格式。假设我有以下人为示例,我们将调用conf.lua

title = "Lorem Ipsum"
author = "John Doe"
date = "01 January 2000"
Run Code Online (Sandbox Code Playgroud)

现在,很简单,我当然可以像这样加载这个文件:

dofile("conf.lua")
Run Code Online (Sandbox Code Playgroud)

但是,问题在于这些定义是在全局命名空间中设置的,这是我不想要的。此外,这使得访问不同的变量作为一个整体变得困难(例如循环配置变量集)。一种解决方案是conf.lua像这样重写:

local conf = {
    title = "Lorem Ipsum",
    author = "John Doe",
    date = "01 January 2000"
}

return conf
Run Code Online (Sandbox Code Playgroud)

依次加载conf.lua以下代码:

local configuration = dofile("conf.lua")
Run Code Online (Sandbox Code Playgroud)

但是,由于我认为显而易见的原因,这并不理想。它要求我的用户跟踪逗号,必须写local,必须记住在最后返回表。如果有某种方法可以conf.lua使用某种自定义范围来执行,那将会是一件好事。

lua lua-5.3

2
推荐指数
1
解决办法
936
查看次数

标签 统计

ada ×1

dcg ×1

freepascal ×1

gnat ×1

jekyll ×1

lua ×1

lua-5.3 ×1

pascal ×1

prolog ×1

record ×1

variant ×1