小编Tao*_*Tao的帖子

有没有更好的方法可以在没有传递阻止时阻止'收益'?

我有一个产生的方法,看起来像:

def a_method(*params)
  # do something
  yield
  # do something else
end
Run Code Online (Sandbox Code Playgroud)

如果传入一个块,我希望这个方法产生块; 并且如果没有传入块,该方法应该轻易地跳过yield sentense而不会崩溃,例如:

 no block given (yield) (LocalJumpError)
Run Code Online (Sandbox Code Playgroud)

当然,最直接的方法是将方法更改为:

def a_method(*params, &block)
  # do something
  yield if block
  # do something else
end
Run Code Online (Sandbox Code Playgroud)

但是不是更漂亮的方式吗?

ruby yield block

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

删除字符串的最后n个字符(在Ruby中)的最佳方法是什么?

在Ruby中,我只是想摆脱字符串的最后n个字符,但以下内容不起作用

"string"[0,-3]
Run Code Online (Sandbox Code Playgroud)

也不

"string".slice(0, -3)
Run Code Online (Sandbox Code Playgroud)

我想要一个干净的方法,而不是像

"string".chop.chop.chop
Run Code Online (Sandbox Code Playgroud)

它可能是微不足道的,请任何人教我!谢谢!

ruby

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

在ruby中定义全局方法的方法

我正在写一个小宝石,我要定义一个DSL样方法,几乎是一样的desc,并task在方法.

Rake将它们定义为Rake::DSL模块中的私有方法然后

self.extend Rake::DSL
Run Code Online (Sandbox Code Playgroud)

将模块混合到主对象中?(如果我错的话,我是新手并继续笑)

这样做有什么好处?是因为将这些方法设为私有可以阻止任何其他对象使用它们(也就是说,为了防止这样的事情some_obj.desc)?

如果我定义方法怎么办? Kernel

module Kernel
  private

  include Rake::DSL
end
Run Code Online (Sandbox Code Playgroud)

有什么区别吗?

ruby global

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

为什么这个Spring AOP切入点没有被触发?

我正在编写非常基于模式的Spring AOP,这里是.xml

<bean id="aoplistener" class="tao.zhang.Listener"/>

<aop:config>
  <aop:aspect ref="aoplistener">                
    <aop:pointcut id="whenCalled" expression="execution(* callme(..))" />
    <aop:after method="scream" pointcut-ref="whenCalled" /> 
  </aop:aspect>
</aop:config>
Run Code Online (Sandbox Code Playgroud)

tao.zhang.Listener中的方法scream()只打印出一些文本,并且应该在调用方法callme()时执行.

我有一个名为logger的bean ,它有方法log()和callme()

public void log(){
    callme();
    System.out.println("Hello from logger ~~~~~~~~~~~~~~~~~~~");
}

public void callme(){
    System.out.println("I'm called");
}
Run Code Online (Sandbox Code Playgroud)

请注意,callme()由log()调用

现在我有一个调度程序,每5秒调用一次log():

<task:scheduler id="myScheduler" pool-size="10"/>

<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="logger" method="log" fixed-rate="5000"/>
</task:scheduled-tasks>
Run Code Online (Sandbox Code Playgroud)

奇怪的是,没有调用scream(),但是如果直接调用callme():

<task:scheduler id="myScheduler" pool-size="10"/>

<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="logger" method="callme" fixed-rate="5000"/>
</task:scheduled-tasks>
Run Code Online (Sandbox Code Playgroud)

scream()被调用!

有什么建议?在我看来,这个切入点与另一个方法中调用的方法不匹配......

java aop spring

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

当rails redirect_to成功调用新url时,为什么浏览器的地址不会改变?

我正在使用rails 4.我试过了

redirect_to queue_urlredirect_to '\queue'.

两者都成功地将GET请求发送到正确的URL,由正确的操作处理,并且网页已使用正确的内容刷新.然而,浏览者的网址仍然保持不变.但我期待将网址更改为\queue.这很烦人,因为如果用户然后刷新页面,页面将刷新到原始URL.

有什么问题吗?

redirect ruby-on-rails ruby-on-rails-4

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

标签 统计

ruby ×3

aop ×1

block ×1

global ×1

java ×1

redirect ×1

ruby-on-rails ×1

ruby-on-rails-4 ×1

spring ×1

yield ×1