小编squ*_*ism的帖子

基于值的哈希数组上的唯一

我觉得这可以改善(红宝石的常见感觉).我正试图根据值unq一系列哈希.在这个例子中,我想要元素的颜色.苔藓和雪是冒名顶替者.

# remove unique array of hashes based on a hash value

a = [
  { :color => "blue", :name => "water" },
  { :color => "red", :name => "fire" },
  { :color => "white", :name => "wind" },
  { :color => "green", :name => "earth" },
  { :color => "green", :name => "moss" },
  { :color => "white", :name => "snow" }
]

# remove moss and snow
uniques = []
a.each_with_index do |r, i|
  colors = uniques.collect {|e| …
Run Code Online (Sandbox Code Playgroud)

ruby

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

在Golang中同时读取文件

读取部分不是并发的,而是处理.我用这种方式表达了标题,因为我最有可能使用该短语再次搜索此问题.:)

在尝试超越示例之后,我陷入了僵局,所以这对我来说是一次学习经历.我的目标是这些:

  1. 逐行读取文件(最终使用缓冲区来完成行组).
  2. 将文本传递给func()执行某些正则表达式工作的文本.
  3. 将结果发送到某处但避免使用互斥锁或共享变量.我正在向一个频道发送整数(总是数字1).这有点愚蠢,但如果它没有引起问题,我想把它留下来,除非你们有一个更整洁的选择.
  4. 使用工作池来执行此操作.我不确定我怎么告诉工人们自己重新排队?

这是游乐场的链接.我试着写有用的评论,希望这是有道理的.我的设计可能完全错误,所以不要犹豫重构.

package main

import (
  "bufio"
  "fmt"
  "regexp"
  "strings"
  "sync"
)

func telephoneNumbersInFile(path string) int {
  file := strings.NewReader(path)

  var telephone = regexp.MustCompile(`\(\d+\)\s\d+-\d+`)

  // do I need buffered channels here?
  jobs := make(chan string)
  results := make(chan int)

  // I think we need a wait group, not sure.
  wg := new(sync.WaitGroup)

  // start up some workers that will block and wait?
  for w := 1; w <= 3; …
Run Code Online (Sandbox Code Playgroud)

go

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

为什么Ruby中的双铲不会改变状态?

我遇到了这种引起错误或混乱的奇怪副作用.所以,想象一下,这不是一个简单的例子,但的一个例子疑难杂症可能.

name = "Zorg"

def say_hello(name)
  greeting = "Hi there, " << name << "?"
  puts greeting
end

say_hello(name)
puts name

# Hi there, Zorg?
# Zorg
Run Code Online (Sandbox Code Playgroud)

这不会改变名称.名字还在Zorg.

但现在看一个非常微妙的区别.在下一个例子中:

name = "Zorg"

def say_hello(name)
  greeting = name << "?"
  puts "Hi there, #{greeting}"
end

say_hello(name)
puts name

# Hi there, Zorg?
# Zorg?  <-- name has mutated
Run Code Online (Sandbox Code Playgroud)

现在名字是Zorg?.疯.greeting =任务中的细微差别.Ruby在内部使用解析(?)或消息传递链接?我以为这只会像铲子一样链起来name.<<("?"),但我想这不会发生.

这就是为什么我在尝试连接时避免使用铲子操作符的原因.我一般尽量避免变异状态,但Ruby(目前)尚未针对此进行优化(尚未).也许Ruby 3会改变一切.很抱歉有关Ruby未来的范围 - 蠕变/侧面讨论.

我认为这特别奇怪,因为具有较少副作用的示例(第一个)具有两个铲操作符,其中具有更多副作用的示例具有更少的铲操作符.

更新 你是正确的DigitalRoss,我让它太复杂了.减少的例子:

one = "1"
two …
Run Code Online (Sandbox Code Playgroud)

ruby string

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

在没有轮询的情况下观察变量的变量

我正在使用一个名为Processing的框架,它基本上是一个Java applet.它具有执行键事件的能力,因为Applet可以.您还可以将自己的各种回调转换为父级.我现在没有这样做,也许这就是解决方案.目前,我正在寻找更多的POJO解决方案.所以我写了一些例子来说明我的问题.

请忽略在命令行(控制台)上使用键事件.当然这将是一个非常干净的解决方案,但它不可能在命令行上,我的实际应用程序不是命令行应用程序.事实上,关键事件对我来说是一个很好的解决方案,但我试图了解事件和轮询,而不仅仅是键盘特定的问题.

这两个例子都翻转了一个布尔值.当布尔值翻转时,我想要触发一次.我可以将布尔值包装在一个Object中,所以如果Object发生了变化,我也可以触发一个事件.我只是不想不必要地使用if()语句进行轮询.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/*
 * Example of checking a variable for changes.
 * Uses dumb if() and polls continuously.
 */
public class NotAvoidingPolling {

    public static void main(String[] args) {

        boolean typedA = false;
        String input = "";

        System.out.println("Type 'a' please.");

        while (true) {
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);

            try {
                input = br.readLine();
            } catch (IOException ioException) {
                System.out.println("IO Error.");
                System.exit(1);
            }

            // contrived state change logic …
Run Code Online (Sandbox Code Playgroud)

java events callback polling

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

Golang YAML阅读地图的地图

这是我的YAML文件.

description: fruits are delicious
fruits:
  apple:
    - red
    - sweet
  lemon:
    - yellow
    - sour
Run Code Online (Sandbox Code Playgroud)

我可以用gopkg.in/yaml.v1软件包阅读这个更平的版本,但是当我看到这个YAML文件看起来像是地图的地图时,我一直想知道如何阅读这个YAML文件.

package main

import (
  "fmt"
  "gopkg.in/yaml.v1"
  "io/ioutil"
  "path/filepath"
)

type Config struct {
  Description string
  Fruits []Fruit
}

type Fruit struct {
  Name string
  Properties []string
}

func main() {
  filename, _ := filepath.Abs("./file.yml")
  yamlFile, err := ioutil.ReadFile(filename)

  if err != nil {
    panic(err)
  }

  var config Config

  err = yaml.Unmarshal(yamlFile, &config)
  if err != nil {
    panic(err)
  }

  fmt.Printf("Value: %#v\n", …
Run Code Online (Sandbox Code Playgroud)

yaml go

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

代码冻结与 Git 无关吗?

在 Git 相对 SVN 的优势(客观)的背景下,Git 更容易的合并/分支功能是否使使用 Git(或等效工具)时代码冻结变得无关紧要?代码冻结的概念是因为以后合并太困难而产生的吗?

我意识到这可能是一个主观问题,但我真的想知道“代码冻结”这个短语是否已经过时,或者是否表明项目不容易分支和合并。如果你可以自动分支和合并,你的代码会冻结吗?我不认为你会这样做,因为你可以在本地进行主题/功能分支并继续开发,因为你知道合并会很容易。

svn git

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

将Coffeescript Underscore.js和Backbone.js放在一起

TLDR; http://jsfiddle.net/squarism/zaVrE/

我是Backbone.js和Underscore.js的新手(我相信Underscore包含在Backbone中).我在一个rails应用程序中使用它,但它的一点不/不重要.我正在关注主干上的Railscast两部分剧集.我正在尝试下划线,骨干,coffeescript,调试和每个人的文档.令人困惑的是Underscore API和coffeescript版本之间的差异.

例如:我有一个User对象数组作为'条目'.每个都有一个胜利者属性.所以这将有效:

# why does this return everyone?
non_winners = @select(entries) ->
  @get('winner') == false
Run Code Online (Sandbox Code Playgroud)

所以这里有很多事情要做.@select来自下划线.@get来自骨干.所有这些都是coffeescript.将其转换为JS调试行有点疯狂.最终虽然我确实找出了骨干以外的javascript来测试它.我的问题是文档:

文档说:

filter_.filter(list, iterator, [context]) Alias: select 
Run Code Online (Sandbox Code Playgroud)

我不知道怎么读这个.我刚刚调用@select,我认为它等同于.select(),但我没有给它一个迭代器.在浏览器控制台上的Javascript中,它仅返回一个数组,其中包含wins为false的对象.在我的应用程序中,如果我是console.log(non_winners),它会让我回到所有人,但是console.log(non_winners.length)符合我的预期(即:如果我有一个胜利者,那就是1).在我学习的过程中,这种差异确实令人困惑.

entries = [
  { name: 'Joe', winner: false },
  { name: 'Bob', winner: false },
  { name: 'Henry', winner: true }
]

# here's an example from my app
#non_winners = @select (entries) ->
#  @get('winner') == false

# here's an example from the API
#evens = _.filter [1..6], (num) -> num % 2 …
Run Code Online (Sandbox Code Playgroud)

coffeescript backbone.js underscore.js

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

对象变量名中的分号

有一个常见的LDAP属性叫做userCertificate; binary.它实际上在属性名称中有一个分号.在ruby中,我将LDAP条目转换为名为"struct"的OpenStruct对象.

>> struct.class
=> OpenStruct

但当然,红宝石认为这是一个行尾的角色.

?> struct.userCertificate;binary
NameError: undefined local variable or method `binary' for main:Object
        from (irb):52
        from :0

IRB知道局部变量在那里,因为它让我struct.userCertificate;binary从选项卡自动完成.在调用struct.methods时我也可以看到类变量.

>> struct.methods
=> ... "send", "methods", "userCertificate;binary=", "hash", ...

它绝对存在,如果我打印整个变量to_s(),我可以看到内容.但是,如果局部变量中有分号,我该如何访问?我有相关的解决方法,但我认为这是一个有趣的问题.

ruby ldap

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

Go中的OO样式结构对象

我是Go的新手,我已经阅读(来自常见问题解答)Go是OO而不是.我想使用Structs创建数据结构,并发现自己试图将Structs视为简单对象.我的概念证明是建造一辆汽车.我知道汽车是一个真实世界的物体,所以它适合于OOP,这在Go中可能很奇怪.但我认为用户类同样方便,所以这对我来说是一个有用的学习练习和参考.

此示例编译但无法正常运行.它使用多个源文件,因此您必须操作GOPATH并为此创建项目文件夹.

它应该如下所示:

$GOPATH/src/car/car.go
$GOPATH/src/car/parts/engine.go
Run Code Online (Sandbox Code Playgroud)

或者另一种看待它的方式:

$ cd /tmp/go/src
$ tree 
.
??? car
    ??? car.go
    ??? parts
        ??? engine.go
Run Code Online (Sandbox Code Playgroud)

Main要求汽车实例到.Start()下面.当它回到主要时,汽车没有启动.

/* car/car.go */
package main

import (
    "car/parts"
    "fmt"
)

type Car struct {
    sMake  string
    model  string
    engine parts.Engine
}

func init() { // optional init of package
    // note that we can't use this as a constructor?
}

func main() {
    car := Car{
        sMake: "AMC",
        model: "Gremlin",
    }
    fmt.Printf("I'm going to work now in my %s …
Run Code Online (Sandbox Code Playgroud)

go

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

标签 统计

go ×3

ruby ×3

backbone.js ×1

callback ×1

coffeescript ×1

events ×1

git ×1

java ×1

ldap ×1

polling ×1

string ×1

svn ×1

underscore.js ×1

yaml ×1