eratw吧 关注:50,299贴子:233,266
  • 6回复贴,共1
求助

erb怎么注释

只看楼主收藏回复

erb注释都是什么样式的,有没有可能嵌套到单行语句之间/末尾,我查资料没查到,就看到靠;单行注释,中文文档里说单行注释不支持行尾注释结果后面示例代码里就来个行尾注释,我有点儿懵


IP属地:内蒙古来自Android客户端1楼2025-07-31 17:09回复
    清除erb文件单行注释、空行和缩进,有bug请及时告诉我,明天我尝试提取函数特征文本
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <filesystem>
    #include <algorithm>
    #include <cctype>
    using namespace std;
    int main()
    {
    using namespace std::filesystem;
    string line;
    for (const auto& entry : directory_iterator(current_path()))
    {
    if (!entry.is_regular_file()) continue;
    string ext = entry.path().extension().string();
    transform(ext.begin(), ext.end(), ext.begin(), ::tolower);
    if (ext != ".erb") continue;
    ifstream fin(entry.path());
    if (!fin.is_open()) continue;
    string str;
    while (getline(fin, str))
    {
    str.erase(str.begin(), find_if(str.begin(), str.end(), [](unsigned char ch) { return !isspace(ch); }));
    if (str.empty()) continue;
    if (str.at(0) == ';') continue;
    line += str + "\n";
    }
    }
    ofstream fout("erb.txt");
    fout << line;
    fout.close();
    }


    IP属地:内蒙古来自Android客户端2楼2025-07-31 17:13
    回复
      2025-09-06 01:18:49
      广告
      不感兴趣
      开通SVIP免广告
      首先不太懂为什么要清除注释,希望能说明原因
      其次行尾注释是支持直接用空格+英文分号+注释内容这种形式,但是这个注释不允许出现在print系语句后面
      单行之间的注释是不存在的
      此外[SKIPSTART] 和 [SKIPEND]之间可以写多行注释


      IP属地:湖南来自Android客户端3楼2025-07-31 17:34
      收起回复
        erb 的注释有些复杂,我根据自己的摸索经验大概总结一下:
        1. 只有单行注释 ; ,和 C 语言的 // 效果一样,但同时存在伪注释 ;!; 与 ;^; ,其后面的内容不应当作注释;
        2. 对于 { ... } 包括的多行语句,Emuera 的做法比较简单粗暴:直接删除换行符,因此这种语句不适合出现注释(否则会污染剩余的行);
        3. 同样,在预处理阶段存在“宏”指令块(如 [IF DEBUG] , [SKIPSTART] 等),若符合条件则中间的内容需要当作不存在,效果等同注释;
        4. erb 中不同指令具有不同的参数解析模式,如 PRINTFORM 会进入字符串解析模式,这个模式中字符串处理具有优先级(类似字符串常量 "S;S" 中 ; 的处理方式)。


        IP属地:江苏4楼2025-08-01 10:12
        收起回复