有没有人知道Ruby的require,告诉我以下是否是有效的语法:
class Something
def initialize(mode)
case mode
when :one then require 'some_gem'
when :two then require 'other_gem'
end
end
end
s = Something.new
Run Code Online (Sandbox Code Playgroud)
如果是这样,将requiregem放在全局命名空间中,就像放在文件顶部一样?
所以,
我最近一直在努力重新分解一些遗留代码,并且发现自己质疑我一直在做的一些重新分解决策的有效性.一个这样的查询是关于在对象内的方法之间使用实例变量进行对象共享.
具体来说,有许多地方将构造函数和方法拆分,并将局部变量提升为实例变量,从而允许从现在单独的方法进行访问.对我来说,这似乎是错误的.它破坏了封装,改变了范围并且可以影响生命周期,但是,这些类中的一些是性能相关的,因此我想知道重新分解这些方法使用参数传递的含义是什么呢?
更重要的是,我想知道我的假设是否有水?在私有方法之间共享时,对象的参数传递优先于实例变量吗?
我正在寻找一种方法将基数为10的数字转换为基数为N的数字,其中N可以很大.具体来说,我正在寻找转换到base-85并再次返回.有谁知道一个简单的算法来执行转换?理想情况下它会提供如下内容:
to_radix(83992, 85) -> [11, 53, 12]
Run Code Online (Sandbox Code Playgroud)
任何想法都表示赞赏!
罗亚
我想从then子句中访问case语句表达式,即
food = "cheese"
case food
when "dip" then "carrot sticks"
when "cheese" then "#{expr} crackers"
else
"mayo"
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下,expr将是食物的当前值.在这种情况下,我知道,我可以简单地访问变量食物,但是可能存在值不再可访问的情况(array.shift等..).除了将expr移到局部变量然后访问它之外,还有一种方法可以直接访问案例expr的值吗?
罗亚
ps我知道这个具体的例子很简单,它只是一个例子.
所有,
我想知道是否有人知道更好的模式而不是:
array_of_hashes.map { |hash_from_array| hash_from_array[:key] }
Run Code Online (Sandbox Code Playgroud)
用于从包含该键的哈希数组中使用特定键检索值数组.
当我发现一些有趣的代码时,我正在阅读绕过objective-c的消息以获得性能(与此特定问题无关):
#import <Cocoa/Cocoa.h>
@interface Fib : NSObject { }
- (long long) cFib: (NSUInteger) number;
@end
@implementation Fib
// c implementation of fib
long long cFibIMP(NSUInteger number)
{
return (number < 3) ? 1 : cFib(number - 1) + cFib(number - 2);
}
// method wrapper for c implementation of fib
- (long long) cFib: (NSUInteger) number
{
return cFibIMP(number);
}
@end
Run Code Online (Sandbox Code Playgroud)
我的问题是; 当使用c函数时,在一个objective-c对象中,c函数(在这种特殊情况下是cFibIMP)放在哪个范围内?objective-c类是否封装了c函数,删除了name-clash的更改,还是将c函数简单地转储到整个objective-c程序的全局范围内?
应该是这种情况,即我是误解,还是一个错误?
a = Array.new(3, Array.new(3))
a[1].fill('g')
=> [["g", "g", "g"], ["g", "g", "g"], ["g", "g", "g"]]
Run Code Online (Sandbox Code Playgroud)
如果不是因为:
=> [[nil, nil, nil], ["g", "g", "g"], [nil, nil, nil]]
Run Code Online (Sandbox Code Playgroud) 红宝石社区之外的人(以及一些内部人员)经常提到红宝石应用程序的速度很慢.对于我们中的许多人来说,这是一个无关紧要的,IO绑定操作等.但是,当它确实成为一个问题时,几乎没有什么可以阻止我们利用本机代码来加快速度.为此我想知道为什么RoR(本身是许多'慢'评论的目标)不利用任何本机元素加速自己?
有什么特别的原因吗?是否缺乏在代码库中优化的紧密循环?
有没有人知道提供传递方法的方法来提供类似下面的东西,但添加了DRY?
class Cover
@some_class = SomeClass.new
def some_method
@some_class.some_method
end
end
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想把它干涸到这样的事情:
class Cover
@some_class = SomeClass.new
passthrough @some_class.some_method
end
Run Code Online (Sandbox Code Playgroud)
没有猴子修补我自己的生活是否有人有?
干杯,
罗亚