小编Jon*_*ein的帖子

使用Perl 6和DBIish的数据访问层

我正在尝试为我的Perl 6预算应用程序设计一个"数据访问层".目标是让用户在SQLite数据库中存储各种购买,我的应用程序将生成各种报告,通知用户消费习惯.

但是,我在做一个"正确"的数据访问层时遇到了麻烦.事实上,我想知道这个应用程序是否值得.无论如何,我想学习如何正确地设计它"面向对象".

我理解我希望我的类成为表,并且类的属性对应于表中的行.就目前而言,我的代码根本不使用类属性,但仍然可以正常工作.

是否有任何理由使用类属性?我查了几个资源,其中大部分都是Java,我很难翻译成Perl 6.看起来不必要复杂,但我怀疑这是因为我不明白这个设计模式的原因.

  1 #!/usr/bin/env perl6
  2
  3 use v6;
  4 use DBIish;
  5
  6 constant DB = 'budgetpro.sqlite3';
  7 my $dbh = DBIish.connect('SQLite', database => DB);
  8
  9 $dbh.do('drop table if exists Essential');
 10
 11 sub create-schema {
 12     $dbh.do(qq:to/SCHEMA/);
 13         create table if not exists Essential(
 14             id      integer primary key not null,
 15             name    varchar not null,
 16             price   numeric(5,2) not null,
 17             quant   integer not null,
 18             desc    varchar not null, …
Run Code Online (Sandbox Code Playgroud)

sql database oop dbi perl6

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

用c ++编写桶排序

我有一本书说:

a)根据值的个位数将一维数组的每个值放入桶阵列的一行中.例如,97放置在行7中,3放置在行3中,100放置在行0中.这称为"分发通道".

b)逐行循环遍历bucket数组,并将值复制回原始数组.这被称为"聚会通行证".一维数组中先前值的新顺序是100,3和97.

c)对每个后续数字位置重复此过程.

我在尝试理解和实现这一点时遇到了很多麻烦.到目前为止,我有:

void b_sort(int sarray[], int array_size) {
    const int max = array_size;
    for(int i = 0; i < max; ++i)
        int array[i] = sarray[i];

    int bucket[10][max - 1];
}
Run Code Online (Sandbox Code Playgroud)

我想,为了用数十,数百等来对它们进行排序,我可以使用它:

for(int i = 0; i < max; ++i)
    insert = (array[i] / x) % 10;
    bucket[insert];
Run Code Online (Sandbox Code Playgroud)

其中x = 1,10,100,1000等.我现在完全迷失了如何写这个.

c++ sorting algorithm bucket

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

Perl变量作用域并在if/else块中使用相同的变量

我试图找出如何在if/else块中使用相同的变量.例如,

$var1
$var2
$var3

if(condition) {
...
}
else {
...
}
Run Code Online (Sandbox Code Playgroud)

我需要在块中访问$ vars1,2和3,但我不能.我想我有一个范围问题.我尝试将它们设为全局,但我看到很多错误并且程序运行不正常.我错过了什么?

这是我的代码.我的问题是服务器需要底部的变量(@varList等),因为这是一个也使用CGI的apache服务器上的脚本.它吐出这样的错误:

[error] Global symbol "$questionslist" requires explicit package name at /home/megaoff/www/vi
ewquestions.dhtml line 46.\nGlobal symbol "$site" requires explicit package name at /home/megaoff/www/viewquestions.dhtm
l line 46.\nGlobal symbol "$xs" requires explicit package name at /home/megaoff/www/viewquestions.dhtml line 46.\nGlobal
 symbol "$username" requires explicit package name at /home/megaoff/www/viewquestions.dhtml line 46.\n

#!/usr/bin/perl

use strict;
use CGI;
use BarryP;

my $pagev = BarryP::makeP("noextracook", 1);
my $bvga = $pagev->{'vga'};
my %vga = %$bvga;
my …
Run Code Online (Sandbox Code Playgroud)

perl

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

无法解析调用者sqlite3_bind:在Perl 6脚本中无法理解此错误

脚本的目的:我希望能够使用它将费用插入到SQLite数据库中,然后再制作自定义报告以提取信息,这样我就可以更好地预算我的费用.

我根本不明白这个错误代码.

perl6 budgetpro.p6

苹果

一天一苹果,医生远离我

嗨,我很精干,很高兴见到你,Eggman

Cannot resolve caller sqlite3_bind(DBDish::SQLite::Native::STMT, Int,
Date); none of these signatures match:
    (DBDish::SQLite::Native::STMT $stmt, Int $n, Blob:D $b)
    (DBDish::SQLite::Native::STMT $stmt, Int $n, Real:D $d)
    (DBDish::SQLite::Native::STMT $stmt, Int $n, Int:D $i)
    (DBDish::SQLite::Native::STMT $stmt, Int $n, Any:U)
    (DBDish::SQLite::Native::STMT $stmt, Int $n, Str:D $d)   
    in method execute at /home/jon/opt/rakudo-star/share/perl6/site/sources/2D749062AA6D5641452CDA214FC7C566E7E3E2A1
(DBDish::SQLite::StatementHandle) line 38
    in method insert at budgetpro.p6 line 54   in block <unit> at budgetpro.p6 line 86`
Run Code Online (Sandbox Code Playgroud)
  2
  3 use v6;
  4 use DBIish;
  5
  6 constant DB …
Run Code Online (Sandbox Code Playgroud)

sqlite perl6

5
推荐指数
2
解决办法
134
查看次数

重载函数没有上下文类型信息| 无法解决基于转换为'int'类型的重载函数'swap'

我正在尝试将自己的冒泡算法编写为练习.我不明白这两个错误消息.谁能用我的代码指出问题?

// Bubble sort algorithm
#include <iostream>
#include <iomanip>
using namespace std;

void bubbleSort(int array[], int arraySize); // bubbleSort prototype

int main(void)
{
        const int arraySize = 10;
        int array[arraySize] = {2,3,6,5,7,8,9,3,7,4};

        cout << "Unsorted: ";
        for(int i = 0; i < arraySize; ++i)
                cout << setw(5) << array[i];

        cout << "Sorted: " << bubbleSort(array, arraySize);
}

void bubbleSort(int array[], int arraySize)
{
        const int max = arraySize;
        int swap = 0;

        for(int i = 0; i < max; ++i) …
Run Code Online (Sandbox Code Playgroud)

c++ bubble-sort

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

我如何使用vim:split来打开ghci和一个Haskell文件?

我正在学习写自己一个计划.

我喜欢vim并且想要使用:split将我的顶级文件作为我的Haskell文件,并将底部拆分为ghci,repl.

但是,拆分只会打开文件.这是真的?如何打开我的顶部拆分和我的Haskell文件,我的底部拆分为ghci?

vim haskell

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

如何在Linux上的NASM中创建UEFI内核

我一直在遵循本指南进行OS开发Windows上的OS开发

但是,我不喜欢Windows开发环境,因此我试图将这些指令转移到我首选的Linux环境中。

我已经尝试了Rod's Books的教程,并且所有内容都能正确编译,并且收到hello.efi文件...但是如何从中启动?我使用命令qemu-system-x86_64 -bios OVMF.fd -kernel hello.efi -net none,但仅获得典型的EFI shell。

我真正想要的是拥有Linux版的Hacker Pulp指南。

我还尝试过kalzlauskas的本指南以及osdev UEFI Bare Bones的本指南。

x86 kernel qemu osdev uefi

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

不了解基本的c ++程序中的错误

#include <iostream>

using namespace std;

int main(void) {
    int number, guess;

    srand(time(NULL));
    number = rand() % 101;

    cout << "Guess a number between 0-100: ";
    cin >> guess;

    if(number > guess) {
        cout << "The number is greater!\n";
    }
    else if(number < guess) {
        cout << "The number is smaller!\n";
    }
    else {
        cout << "Cognratulations! The number is "number"!\n";
    }
    cin-get();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

error: 'srand' was not declared in this scope
error: 'rand' was not declared in this …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors

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

将数组复制到哈希

我正在尝试将数组复制到散列,这样数组的每个元素都是一个键,后跟一个空值.

my %questions = map { @u_list => $_ } @u_list;
Run Code Online (Sandbox Code Playgroud)

这只打印出来

=>
Run Code Online (Sandbox Code Playgroud)

我在perldoc上看到这个成语:

     %hash = map { get_a_key_for($_) => $_ } @array;
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何设置键.我希望键是数组中的每个元素.

perl

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

如何使用Perl将localtime转换为YYYY-MM-DD

无论目前的日期是什么,我都有这个代码可以获得最近的星期五:

for(my $i = 1; $i < 8; $i++) {
     my $t = time() + $i * 24 * 3600;
     next unless (localtime($t))[6] == 5; # friday                                                                                               
     $nextfri = scalar(localtime($t));                                                                                                           
     last;                                                                                                                                        
}
Run Code Online (Sandbox Code Playgroud)

这将以以下格式返回日期: Fri May 11 13:47:24 2018

但是,II必须将此日期用于SQL查询,因此我必须以此格式使用此日期: YYYY-MM-DD

我尝试过使用Time :: Piece:

 print STDERR "Time::Piece: " . Time::Piece->strptime("$nextfri", '%Y %m %d'), "\n";
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误: Error parsing time at /usr/local/lib/perl/5.18.2/Time/Piece.pm line 481, <DATA> line 1.

如何更改日期格式?

perl

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

标签 统计

c++ ×3

perl ×3

perl6 ×2

algorithm ×1

bubble-sort ×1

bucket ×1

compiler-errors ×1

database ×1

dbi ×1

haskell ×1

kernel ×1

oop ×1

osdev ×1

qemu ×1

sorting ×1

sql ×1

sqlite ×1

uefi ×1

vim ×1

x86 ×1