浪語:修订间差异

无编辑摘要
无编辑摘要
无编辑摘要
标签2017年版源代码编辑
 
(未显示2个用户的18个中间版本)
第1行: 第1行:
 一種 JavaScript 的方言,因為由浪打所創因而得名。
 一種 JavaScript 的方言,因為由浪打所創因而得名。


 目前你可以在浪打所作的[https://chrome.google.com/webstore/detail/drrr-chatbot-extension/fkmpnkcjocenkliehpdhlfbmdmdnokgm  聊天插件]上使用他。 (如果有牆,可以參考[https://share.weiyun.com/1z7BPluA 這裡])
 目前你可以在浪打所作的 [[浪打聊天插件| 聊天插件]上使用他。


[[File:Lambda language.png|每三十秒使用一言 API 換一次部屋描述。|替代=|有框]]
此手冊目前還有 [https://hackmd.io/@nobodyzxc/SkoZau-Qd/https%3A%2F%2Fhackmd.io%2FVKZIZxRJQ4yPT-FElCa1GQ HackMD 線上板手冊中文版](更好的閱讀體驗,但須翻牆)
 
在 HackMD 上也有 [https://hackmd.io/@nobodyzxc/SkoZau-Qd/https%3A%2F%2Fhackmd.io%2F8tO-FVCJSCGpRPoRDd1Uig English Manual].
 
[[File:Lambda language.png|每三十秒使用一言 API 換一次部屋描述。|有框|链接=Special:FilePath/Lambda_language.png]]


 資料型態大概以下這些:
 資料型態大概以下這些:
第14行: 第18行:
#Function ((a, b) => a + b)
#Function ((a, b) => a + b)


 因為這個語言會直譯 成 JavaScript
 因為這個語言會 被 JavaScript  直譯,


 所以 JS 裡的物件其實都能在這個語言裡面進行構造、使用。
 所以 JS 裡的物件其實都能在這個語言裡面進行構造、使用。
第27行: 第31行:
 和 JS 不同的地方在於,浪語裡面所有東西都是 Expression,都一定有回傳值。
 和 JS 不同的地方在於,浪語裡面所有東西都是 Expression,都一定有回傳值。


 這個語言通常不會出現 undefined,取而代之的是,他回傳一個空物件 {}。
 這個語言通常不會出現 undefined,取而代之的是,他回傳一個<s> 空物件 {}</s> false


 分號 (;) 基本上都可以省略,或者你可以使用分號回傳一個空物件。
 分號 (;) 基本上都可以省略,或者你可以使用分號回傳<s> 一個空物件</s> false


 所有第一次參考到的變數,如果不存在,便會以空物件創建。
 所有第一次參考到的變數,如果不存在,便會<s> 以空物件創建</s> 是 false
<syntaxhighlight lang="javascript" line="1">
<syntaxhighlight lang="javascript" line="1">
print(x)
print(x)
// not defined, show {}
// not defined, show false (before v1.740 is {}, false after v1.740)
</syntaxhighlight>
</syntaxhighlight>


第40行: 第44行:
<syntaxhighlight lang="javascript" line="1">
<syntaxhighlight lang="javascript" line="1">
fetch("https://v1.hitokoto.cn")
fetch("https://v1.hitokoto.cn")
  .then(response => response.json())
   .then(response => response.json())
.then(result => {
.then(result => {
print(result.hitokoto);
print(result.hitokoto);
});
});
</syntaxhighlight>
</syntaxhighlight>
※ <s>測試姬 /baka yande.re 指令復現</s>(nsfw 警告)
<span style="color:black; background-color:black">event[me,msg](u,m:"^/baka yande.re")=>$.get("<nowiki>https://yande.re/post.json?limit=1&page=</nowiki>"+Math.floor(Math.random()*1e4),d=>drrr.dm(u,".",d[0].preview_url))</span>


 基本的 +, -, *, / 運算子都有支援,+=, ++, -- 之類的也有,但目前不支援三元運算子。
 基本的 +, -, *, / 運算子都有支援,+=, ++, -- 之類的也有,但目前不支援三元運算子。
第75行: 第84行:
<syntaxhighlight lang="javascript" line="1">
<syntaxhighlight lang="javascript" line="1">
f = (x) =>
f = (x) =>
   if(x <= 0) 0
   if x <= 0 then 0
   else if(x == 1) 1
   else if x == 1 then 1
   else f(x - 1) + f(x - 2)
   else f(x - 1) + f(x - 2)


第114行: 第123行:
// 可以綁定以下 event 供使用者調用
// 可以綁定以下 event 供使用者調用
event msg (user, msg: "^/play") => {
event msg (user, msg: "^/play") => {
word = argfmt(["$[1-]"], user, msg)[0]
   word = argfmt(["$[1-]"], user, msg)[0]
  drrr.play(word)
   drrr.play(word)
}
}


第125行: 第134行:


// 還有一些幫你抓好的變數
// 還有一些幫你抓好的變數
loc // 現在位置(大廳或房間 "lounge" / "room")
drrr.loc // 現在位置(大廳或房間 "lounge" / "room")
profile // 個人訊息
drrr.profile // 個人訊息
room // 房間訊息
drrr.room // 房間訊息
users // 房間成員
drrr.users // 房間成員
info // 跟個人訊息有點像
drrr.info // 跟個人訊息有點像
rooms // 所有房間,大廳狀態
drrr.rooms // 所有房間,大廳狀態


// 有時你會需要更新,可以透過以下函數去更新他們
// 有時你會需要更新,可以透過以下函數去更新他們
updateLounge(callback);
drrr.getLounge(callback);
updateProfile(callback);
drrr.getProfile(callback);
updateLoc(callback);
drrr.getLoc(callback);


</syntaxhighlight>
</syntaxhighlight>
第183行: 第192行:
// 冒號 (:) 後面是 RegExp,如果匹配才呼叫。
// 冒號 (:) 後面是 RegExp,如果匹配才呼叫。
// 適用於 user 和 content (第一和第二個參數)
// 適用於 user 和 content (第一和第二個參數)
event msg (user: "lambda", content, url, tripcode, req){
event msg (user: "lambda", content, url, tripcode, req) => {
    drrr.print(user + " 叫了一下");
    drrr.print(user + " 叫了一下");
}
}


// 參數個數和名稱都可以任意,看你需求
// 參數個數和名稱都可以任意,看你需求
event join (user){
event join (user) => {
    drrr.print("welcome " + user);
    drrr.print("welcome " + user);
}
}
第211行: 第220行:
}
}


// 等價於第一個範例
// parse error, 10000() is not a function call
timer 10000 () => {
timer 10000 () => {
    print("hello world");
    print("hello world");
第222行: 第231行:
<syntaxhighlight lang="javascript" line="1">
<syntaxhighlight lang="javascript" line="1">
later 10000 print("hello world")
later 10000 print("hello world")
// 注意以下 function 不會被呼叫
f = () => console.log("hello world")
later 3000 f // 不會被呼叫,因為 f 被 auto lift,又被包了一層 function 在外面
later 3000 f() // 這樣才會在三秒後印出 hello world
later 3000 () => console.log("hello world") // parse error, 3000() is not a function call
later 3000; () => console.log("hello world") // works, good
later 3000; (a, b) => console.log("hello world") // fine, too
later 3000 console.log("hello world") // 這個也會正常運作
later 3000 {
   console.log("hello world") // 這個也會正常運作
}
</syntaxhighlight>
</syntaxhighlight>
※ 注意 timer 和 later 會將 "非 lambda 的 expression" lift 成一個 lambda expression,然後時間到了再 eval 他。


 一些功能實作:
 一些功能實作:
第229行: 第251行:


<syntaxhighlight lang="javascript" line="1">
<syntaxhighlight lang="javascript" line="1">
guests = users.map((x)=>x.name);
guests = drrr.users.map((x)=>x.name);
event join (user) => {
event join (user) => {
   if guests.includes(user)
   if guests.includes(user)
  drrr.print("welcome back, " + user)
  then drrr.print("welcome back, " + user)
   else guests.push(user)
   else guests.push(user)
}
}
第250行: 第272行:


gnjdg = (guess, callback) => {
gnjdg = (guess, callback) => {
   if(valid(guess)){
   if(valid(guess)) then {
    d = theNumber.split("")
    d = theNumber.split("")
    g = guess.split("")
    g = guess.split("")
第257行: 第279行:
    b  = c - a
    b  = c - a
    callback(
    callback(
     if(a === 4)
     if(a === 4) then
      "Your Number is Correct"
      "Your Number is Correct"
     else
     else
第275行: 第297行:
// 房間上限 9.0001 人
// 房間上限 9.0001 人
event join (user) => {
event join (user) => {
   if users.length == 10
   if drrr.users.length == 10
  then
   drrr.print("/me恭喜成為 0.0001 人,你終於不做人類了嗎!");
   drrr.print("/me恭喜成為 0.0001 人,你終於不做人類了嗎!");
   else
   else
drrr.print("/me歡迎第 " + String(users.length) + " 個貴賓!");
drrr.print("/me歡迎第 " + String(drrr.users.length) + " 個貴賓!");
}
}
</syntaxhighlight>[[File:Script 剛完成的傳教活動.png|链接=Special:FilePath/Script_剛完成的傳教活動.png|左|有框]]
</syntaxhighlight>
 
====套件管理器====
可以用套件管理導入
 
也可以 fork 一份 bs-pkgs 維護一個 mirror,
 
然後透過 <code>add_mirror(alias, repo)</code> 來添加你的 mirror。
 
或者直接呼叫也行
 
要刪除的話就呼叫 <code>del_mirror(alias)</code>。[[File:選擇mirror.png|左|有框|選擇 mirror 後,點選 update 更新套件索引。之後可以選擇分類和套件,可以把他載入到編輯器或是儲存到本地。|链接=Special:FilePath/選擇mirror.png]]
 
 
 
 
 
 
 
 
 
<br />
[[File:本地套件.png|左|有框|本地的套件句選後,可以選擇預載入,或是刪除。重新開啟視窗,如果是有句選,就代表為預載入套件。|链接=Special:FilePath/本地套件.png]]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
[[File:預載套件.png|左|有框|確定預載入後,在編輯器以套件名作為函數調用。(套件通常會提供這個函數,但具體還是要看套件內容定義)|链接=Special:FilePath/預載套件.png]]
 
 
 
 
 
<br />[[File:Script 剛完成的傳教活動.png|链接=Special:FilePath/Script_剛完成的傳教活動.png|左|有框]]<br />
153

个编辑