小编Gre*_*gle的帖子

在Ruby和JS中编写了相同的函数,Ruby工作但JS未定义

我想尝试递归来计算复合兴趣而不是循环.

在Ruby中:

def compound balance, percentage
  balance + percentage / 100 * balance
end

def invest amount, years, rate
  return amount if years == 0
  invest compound(amount, rate), years - 1, rate
end
Run Code Online (Sandbox Code Playgroud)

这很好用.1年后5万美元的10,000美元是10,500美元; 10年后,16,288美元.

现在JavaScript(ES6)中的逻辑相同.

function compound(balance, percentage) {
    return balance + percentage / 100 * balance;
}

function invest(amount, years, rate) {
    if (years === 0) {
        return amount;
    } else {
        invest(compound(amount, 5), years - 1, rate);
    }
}
Run Code Online (Sandbox Code Playgroud)

这会回来undefined,但我无法弄清楚原因.它invest使用正确的参数调用正确的次数,逻辑是相同的.该compound功能的工作原理,我测试了一下分开.那么......可能出错了什么?

javascript

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

我是否可以只读取文件的n个字节而不创建n大小的缓冲区?

我正在检测非常大(30+ GB)的文件是否相同.而不是散列所有30 GB,我认为我将哈希第一兆字节,然后兆字节从10%开始进入文件,然后兆字节从20%开始进入文件,依此类推.检测1000万字节是否相同对于我的目的来说已经足够了.

在Ruby或JavaScript中,当我这样做时,我只需创建一个10 MB的缓冲区,读入1 MB,在文件中向前搜索,在缓冲区中再读取1 MB,向前搜索等,然后对缓冲区进行哈希处理.

在围棋,我有点困惑如何做到这一点,因为Read,ReadFull,ReadAtLeast等功能似乎都采取了缓存作为一个参数,然后读,直到填满它.所以我可以分配11个单独的缓冲区,用单独的1 MB块填充10个,然后将它们连接到最后一个哈希...但这似乎超级低效和浪费.我确定我错过了一些东西,但是搜索文档只会让我更加困惑.什么是Go中这个问题的合适解决方案?我可以简单地要求将n个字节读入预先存在的缓冲区吗?

go

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

什么是Rails秘密令牌,该如何设置?

我正在尝试在Phusion Passenger下创建一个Rails应用,并且遇到了missing secret_key_base错误。我已经用Google搜索了此错误,却找不到关于秘密令牌/密钥是什么,我如何设置它或用于什么目的的明确解释-仅在这里和那里全部都是假定我已经知道了其他内容,因此无法真正推测知道发生了什么事。我在Rails上购买的两本书也都没有对此进行讨论。

什么是秘密令牌?

这是为了什么

创建新应用后如何设置?

ruby-on-rails

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

你如何捕获正则表达式的一部分到Ruby中的变量?

我知道"string"[/regex/],它返回匹配的字符串部分.但是,如果我只想返回字符串中捕获的部分,该怎么办?

我有字符串"1952-FEB-21_70_The_Case_of_the_Gold_Ring.mp3".我想在变量中存储title文本The_Case_of_the_Gold_Ring.

我可以用正则表达式捕获这部分/\d_(?!.*\d_)(.*).mp3$/i.但是编写Ruby "1952-FEB-21_70_The_Case_of_the_Gold_Ring.mp3"[/\d_(?!.*\d_)(.*).mp3$/i]返回0_The_Case_of_the_Gold_Ring.mp3并不是我想要的.

我可以通过写作得到我想要的东西

"1952-FEB-21_70_The_Case_of_the_Gold_Ring.mp3" =~ /\d_(?!.*\d_)(.*).mp3$/i
title = $~.captures[0]
Run Code Online (Sandbox Code Playgroud)

但这似乎很草率.当然有一个正确的方法来做到这一点?

(我知道有人可能会写一个更简单的正则表达式来定位我想要的文本,让"string"[/regex/]方法工作,但这只是一个例子来说明问题,具体的正则表达式不是问题.)

ruby

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

创建一个空数组然后用迭代器填充它是不是惯用的?

假设我想要一个people从数据库查询构建的数组.我通常会写

people = Array.new
db.execute("select name from people") {|person| people << person}
Run Code Online (Sandbox Code Playgroud)

工作正常,但我想知道是否有一种方法可以在一行中创建,如果它尚不存在则创建一个数组然后填充它.

ruby

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

将"2015-03-18 22:00"变成Time对象的最好方法

我有三个字符串,从数据库中提取:

  • "2015-03-18" (事件发生的日期)
  • "22:00" (事件发生的时间)
  • "-05:00" (事件发生位置的UTC偏移).

我想组合这三个字符串来生成Ruby Time对象.我正在做:

utc_offset = "-05:00"
airtime = "22:00"
airday = "2015-03-18"

year,month,day,hour,minutes = airday.split("-").map(&:to_i) + airtime.split(":").map(&:to_i)
Time.new(year,month,day,hour,minutes,0,utc_offset)
Run Code Online (Sandbox Code Playgroud)

这有效; 我只是想知道它是否是正确/标准/惯用/最清晰的方式.

ruby

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

如何通过从另一个数组中分配随机值将数组转换为哈希?

我有一个数组names,包含12个名字.

我有另一个数组weights,包含12个数字.

我想创建一个散列,其中键是名称,值是权重.

权重数字是预先确定的(它们应该总是,例如,200,150和180),但每次运行程序时都应将它们分配给随机名称.

例如,如果我使用数组names = ['homer', 'marge', 'maggie']weights = [265, 140, 10],我可以运行该程序,并得到{homer: 140, marge: 265, maggie: 10},然后重新运行它,并得到{homer: 10, marge: 140, maggie: 265}.

这样做的明智之举是什么?

ruby

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

'声明并且未使用'因为Go编译器不能考虑循环?

标题不好,但我不知道如何在字符限制内描述它.

作为一个学习练习,我正在尝试编写一个模拟彩票抽奖的Go程序.它绘制六个随机数作为获胜集,然后不断绘制随机数组,随后再次获得该集合.

首先,我编写了一个函数,它接受一个通道并无限循环"向通道添加6个随机整数的数组":

func draw(ch chan<- [6]int) {
    generator := rand.New(rand.NewSource(time.Now().UnixNano()))
    for {
        ch <- [6]int{
            generator.Intn(100),
            generator.Intn(100),
            generator.Intn(100),
            generator.Intn(100),
            generator.Intn(100),
            generator.Intn(100),
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在main()我指定两个OS线程,创建一个可以容纳250个6个整数的数组的通道,并draw()在goroutine中启动我的函数.

runtime.GOMAXPROCS(2)
ch := make(chan [6]int, 250)
go draw(ch)
Run Code Online (Sandbox Code Playgroud)

接下来我[4 8 15 16 23 42]从频道中获取一个获胜集(例如),然后是"当前"集合,这意味着最近的抽奖.我将game_played计数器设置为1:

winning := <- ch
current := <- ch
games_played := 1
Run Code Online (Sandbox Code Playgroud)

这是棘手的一点.

在无限循环中,我检查当前平局是否等于获胜平局.如果是,我打印播放的游戏数量,并从循环中断.

如果不是,我设置current为新的抽奖,并递增计数器.然后循环应该if winning == current...反复运行检查,直到匹配为止.

for {
    if winning == current {
        fmt.Println(games_played)
        break
    } else …
Run Code Online (Sandbox Code Playgroud)

go

0
推荐指数
1
解决办法
94
查看次数

(100.0/3.0)*3 == 100,但使用变量得到99.99996.这是怎么回事?

我知道浮子固有的不精确.我感到困惑的是为什么我会从我期望解决的问题返回"100"0.99999999等.0.33*3怎么可能产生100?

这是我的代码:如果我说

float x = 100.0/3.0;
printf("%f",x*3.0);
Run Code Online (Sandbox Code Playgroud)

输出为"99.999996".但如果我说

printf("%f",(100.0/3)*3);
Run Code Online (Sandbox Code Playgroud)

输出为"100".它们不应该相同吗?我希望x解决(100.0/3.0),正是用明文写的 - 然而它们会产生两种不同的结果.

c++ floating-point

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

标签 统计

ruby ×4

go ×2

c++ ×1

floating-point ×1

javascript ×1

ruby-on-rails ×1