Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

外部变量 #7

Open
umajho opened this issue Mar 27, 2023 · 3 comments
Open

外部变量 #7

umajho opened this issue Mar 27, 2023 · 3 comments

Comments

@umajho
Copy link
Owner

umajho commented Mar 27, 2023

$ 开头的标识符指向外部变量,其标识符中间允许有不连续的 .,在开头的 $ 后也可以再跟一个 $.

外部变量在开始求值之前由外界注入。

配合 rotext,目前设想可以这么做:

  • {= d100 <= $.luck },发串者的主要角色为 x 时也可以是 {= d100 <= $x.luck}
  • { $.hp = 42 },… 时也可以是 { $x.hp = 42 }
  • { $.hp -= d4 },… 时也可以是 { $x.hp -= d4 }- 也可以是其他二元运算符。
  • { $_tmp = 42 },以 $_ 开头则只在帖子(楼层)内生效。
  • { $$day = 42 },以 $$ 开头则属于全局。
@umajho umajho added this to the 1.0 milestone Mar 27, 2023
@umajho umajho modified the milestones: 1.0, 1.1 Mar 28, 2023
@umajho umajho mentioned this issue Apr 8, 2023
19 tasks
@umajho
Copy link
Owner Author

umajho commented Apr 27, 2023

外部变量名称的语义由外部决定。比如配合 rotextrolludejo 也可以是这样:

所有外部变量(依然)以 $ 开头。除去开头的 $ 后:

  • 前缀为 _ 的是楼层内的临时变量,如:$_tmp
  • 前缀为角色(role)名以及 .的是角色所属变量,默认串主和角色持有者可以写入,如:$小明.hp
  • 上一条的角色若为发帖者的主要角色,则前缀简写为 .,如:$.hp
  • 其他则为全局变量,默认只有串主可以写入。

@umajho
Copy link
Owner Author

umajho commented Jun 20, 2023

更新

下面提到的方案已经存在一段时间了,但一直没有放到这里。

这个方案主要配合 rojo1角色role系统。
考虑到一个角色名为 小明,很自然能想到用 @小明 来提及它。
虽然 rojo 目前没打算引入提及系统,但 Dicexp 可以借用这种标记方式。

具体如下:

  • @_(<name>) 用于访问临时变量,其仅在楼层内有效。(也就是说,角色名(甚至具名)不能以 _ 开头。)
  • @(<role name>).(<property name>) 用于访问对应角色拥有的属性(变量)。
  • @.(<property name>) 在发帖者指定了扮演的角色(之前所说的 “主要角色”)时,作为访问那个角色拥有的属性(变量)的简写形式。不过也可能不会实现这个。
  • @@(<name>) 用于访问全局变量。

Footnotes

  1. rolludejo 太长了,留头存尾去中间得 rojo

@umajho
Copy link
Owner Author

umajho commented Jun 27, 2023

已于 19f0e78 在语法层面上支持引用第一层外部变量。
要完整实现,还剩下:

  • 实现 Map(见 一些数据结构 #17)。
  • 语法上实现用 . 访问 Map 变量的值。
  • parsing 部分提前提取出可能需要的外部变量。(包括分析:使用 . 嵌套的静态访问,以及哪些部分由于可能涉及动态访问而无法分析。)
  • executing 部分支持载入外部变量。(直接全部传进去,还是传入一个按需返回变量对应值的函数?)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant