小编Rya*_*wis的帖子

RESTful-Authentication还是Authlogic?

我在两者之间做出决定时遇到了麻烦.它们看起来都很棒,但我想知道哪个更容易控制.

你的这些插件有什么经验?你会推荐哪个?

ruby authentication ruby-on-rails restful-authentication authlogic

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

模拟默认对象#检查输出?

o = Object.new
o.instance_eval { @str = "foo" }
p o # => #<Object:0x5dd1a0 @foo="bar">
Run Code Online (Sandbox Code Playgroud)

这很好.p使用对象作为参数调用将打印对象inspect方法的输出.但是,不幸的是,如果对象有一个to_s方法被覆盖,那么它将输出该输出:

class << o
  def to_s; @str; end
end
p o.to_s # => "foo"
p o # => foo
Run Code Online (Sandbox Code Playgroud)

所以要解决这个问题,我们必须inspect在对象上定义一个方法:

class << o
  def inspect; "blah"; end
end
p o # => "blah"
Run Code Online (Sandbox Code Playgroud)

如何使我的对象的inspect方法输出默认的Ruby方式,如我的第一个代码示例的第3行所示?

我最接近的是下面的,但我不确定它是否正确

class << o
  def inspect
    vars = instance_variables.collect { |v| v.to_s << "=#{instance_variable_get(v).inspect}"}.join(", ")
    "#<#{self.class}:0x#{object_id} #{vars}>"
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby

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

打印块的实际Ruby代码?

这可能吗?

def block_to_s(&blk)
  #code to print blocks code here
end

puts block_to_s do
  str = "Hello"
  str.reverse!
  print str
end
Run Code Online (Sandbox Code Playgroud)

这将打印终端的跟随:

str = "Hello"
str.reverse!
print str
Run Code Online (Sandbox Code Playgroud)

ruby

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

在它的父类中定义子类是不合常的吗?

在下面的父类下面定义一个子类是常规的吗?

class Element

  class Div < Element

  end

  class Paragraph < Element

  end

end
Run Code Online (Sandbox Code Playgroud)

或者使模块包含子类更合适?

class Element

end

module Elements

  class Div < Element

  end

  class Paragraph < Element

  end

end
Run Code Online (Sandbox Code Playgroud)

或者在模块中创建"基础"类并在同一模块中定义子类?

module Element

  class Base

  end

  class Div < Base

  end

  class Paragraph < Base

  end

end
Run Code Online (Sandbox Code Playgroud)

或者强制命名约定更好?

class Element

end

class DivElement < Element

end

class ParagraphElement < Element

end
Run Code Online (Sandbox Code Playgroud)

似乎每个库都选择不同的命名空间/命名约定.

哪个最好用?
各自的优点和缺点是什么?

ruby

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

将STDOUT输出到文件并再次返回

我使用此代码将STDOUT路由到文件:

STDOUT.reopen(File.open("./OUTPUT",'w+'))
Run Code Online (Sandbox Code Playgroud)

现在我需要再次将STDOUT路由到终端.

我该怎么做?

ruby

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

启动和停止Ruby线程

如何在另一个线程中启动和停止单独的线程?

loop_a_stopped = true
loop_a = Thread.new do
    loop do
        Thread.stop if loop_a_stopped

        # Do stuff

        sleep 3
    end
end

loop_b = Thread.new do
    loop do
        response = ask("> ")
        case response.strip.downcase
            when "start"
                loop_a_stopped = false
                loop_a.run
            when "stop"
                loop_a_stopped = true
            when "exit"
                break
        end
    end
end

loop_a.join
loop_b.join
Run Code Online (Sandbox Code Playgroud)

ruby multithreading

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

块内的实例评估

我有一个Builder类,可以让你添加到其中一个实例变量:

class Builder
    def initialize
        @lines = []
    end

    def lines
        block_given? ? yield(self) : @lines
    end

    def add_line( text )
        @lines << text
    end
end
Run Code Online (Sandbox Code Playgroud)

现在,我该如何改变它

my_builder = Builder.new
my_builder.lines { |b|
    b.add_line "foo"
    b.add_line "bar"
}
p my_builder.lines # => ["foo", "bar"]
Run Code Online (Sandbox Code Playgroud)

进入这个?

my_builder = Builder.new
my_builder.lines {
    add_line "foo"
    add_line "bar"
}
p my_builder.lines # => ["foo", "bar"]
Run Code Online (Sandbox Code Playgroud)

ruby

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

WPF StackPanel布局问题

我正在尝试创建一个类似于此的布局:

替代文字http://img20.imageshack.us/img20/3533/stackn.png

这是我的代码:

<StackPanel TextBlock.FontFamily="Segoe UI" Orientation="Horizontal">
    <StackPanel HorizontalAlignment="Stretch" Width="Auto">
        <TextBlock Padding="5,0,5,0" FontSize="12" FontWeight="Bold" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Title}" />
        <TextBlock Padding="5,0,5,0" FontSize="12" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Id}" />
    </StackPanel>
    <StackPanel>
        <TextBlock Padding="5,0,5,0" FontSize="10" Text="Delete">
            <TextBlock.Style>
                <Style TargetType="{x:Type TextBlock}">
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter Property="FontWeight" Value="Bold" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>    
        </TextBlock>
        <TextBlock Padding="5,0,5,0" FontSize="10" Text="Move">
            <TextBlock.Style>
                <Style TargetType="{x:Type TextBlock}">
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter Property="FontWeight" Value="Bold" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>    
        </TextBlock>
    </StackPanel>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

c# wpf visual-studio-2008 visual-studio

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

每个都是多维的

我怎么做下面这样的事情?

[
    'foo'
    ['bar', 'baz'],
    [
        'one',
        ['two', 'three']
    ]
].each { |word| puts word }

# I want this to return:

foo
bar
baz
one
two
three
Run Code Online (Sandbox Code Playgroud)

ruby multidimensional-array

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

CSS选择器中的OR语句

可以使用CSS选择器a[href^="http:"], a[href^="mailto:"]来匹配文档中的所有外部链接和邮件链接,但有没有办法在选择器的引号部分中使用"或"语句,如下所示:a[href^="(http|mailto):"]

css css-selectors

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