我想在Android ICS中读取/ proc/net/xt_qtaguid/stats,它记录所有接口和应用程序流量统计信息.以下是代码段:
String line = null;
BufferReader reader = new BufferedReader(new FileReader(new File("/proc/net/xt_qtaguid/stats")));
line = reader.readLine();/*Here I can read the 1st line correctly, it return "idx  iface acct_tag_hex..."*/
splitLine(line, keys);
line = reader.readLine();//!!!!!Read next line, it returns null!!!!!!
如果我捕获此文件,它将显示:
idx iface acct_tag_hex uid_tag_int cnt_set rx_bytes rx_packets tx_bytes tx_packets rx_tcp_bytes rx_tcp_packets rx_udp_bytes rx_udp_packets rx_other_bytes rx_other_packets tx_tcp_bytes tx_tcp_packets tx_udp_bytes tx_udp_packets tx_other_bytes tx_other_packets
2 rmnet0 0x0 0 0 6266 105 8882 121 1428 30 4838 75 0 0 208 4 2552 44 …
我在TCL中看到了一些这样的代码:
namespace eval ::info {
    set count 0;
    set id 1;
    set role admin;
    namespace export *
}
proc ::info::setcount {
    set ::info::count 0;
}
proc ::info::setId {
    set ::info::id 1;
}
proc ::info::setRole {
    set ::info::role user;
}
在命名空间:: info中定义了三个变量,但是在命名空间中未声明三个procs(setcount setId setRole),好像它们是在:: info之外定义的,是否允许?这是如何运作的?
我正在尝试弄清楚如何将语句作为方法参数传递 - 用作块过滤条件的一部分.例如,我有以下代码:
def method
  other_method.persons.each do |ped|
    next if ped.first_name.nil? or ped.last_name.nil?
    puts ped.id
    puts ped.full_name
  end
end
我希望能够做的如下(因此我可能会更改方法中使用的过滤条件).是否可以从参数中传递包含块引用的语句?:
def method(statement)
  other_method.persons.each do |ped|
    next if statement
    puts ped.id
    puts ped.full_name
  end
end
我很欣赏这方面的一些方向.
我正在尝试学习块和触发器,我觉得这应该是可行的,但到目前为止我还没有成功.
我想要的是什么:
def main_action(generic_variable, block)
 generic_variable += 1 # I do more interesting stuff than this in my version
 yield(generic_variable)
end
main_action(3, {|num| num + 5 })
或类似的东西.
我找到的最接近的是http://mudge.name/2011/01/26/passing-blocks-in-ruby-without-block.html,似乎需要创建一个传递方法来发送块:
class Monkey
  # Monkey.tell_ape { "ook!" }
  # ape: ook!
  #  => nil
  def self.tell_ape(&block)
    tell("ape", &block)
  end
  def self.tell(name, &block)
    puts "#{name}: #{block.call}"
  end
end
如果我使用在我的代码中设置的相同传递方法,我可以使它工作,但它似乎是不必要的代码.我试着Monkey.tell("ape", { "ook!" })直接打电话,但得到了syntax error, unexpected '}', expecting tASSOC
是否有可能在一次调用中向一个函数发送一个变量和一个块(或proc,我不挑剔)?另外,如果你有时间,上面发生了什么?为什么不起作用?
我想在内核模块中保存一些信息。我在stackoverflow中看到过类似的问题,但我的略有不同。假设我使用此代码写入 /proc 文件。我应该如何在我的内核模块之一中调用它?我有一个自定义内核模块被调用mymodule,它不是主文件(没有 init_module()),下面的函数被调用。在这种情况下,函数的输入值应该是什么file?基本上可以在内核模块中创建 /proc 文件吗?
int procfile_write(struct file *file, const char *buffer, unsigned long count,
           void *data)
breakproc中的三个循环一直跳到puts 8?这很反直觉.puts 6?3.times do
  puts "outer loop"
  break_proc = proc { break }
  puts 1
  loop do
    puts 2
    loop do
      puts 3
      loop do
        puts 4
        break_proc.call
        puts 5
      end
      puts 6
    end
    puts 7
  end
  puts 8
end
Run Code Online (Sandbox Code Playgroud)outer loop 1 2 3 4 8 outer loop 1 2 3 4 8 outer loop 1 2 3 4 8
我想要修改一个variable位置,复制methodname!语法而不是将新的修改值重新分配给它var.我可以这样做proc吗?我还在学习procs,看到它们非常有用,使用得当.
a = "Santol bag 85.88   www.example.com/products/16785
Shaddock    kg  2.94    www.example.com/products/4109
Palm Fig    5kg 94.34   www.example.com/products/23072
Litchee lb  95.85   www.example.com/products/2557"
a = a.split("\n")
linebreak = Proc.new { |text| text.split("\n") }
linebreak![a]
第一次重新分配似乎很麻烦.proc版本我想看看我是否可以内联执行它.这可能吗?
让我们说我有班级:
class Car
  attr_accessor :brand, :color
  def initialize(br, col)
    @brand = br
    @color = col 
  end
end
first_car = Car.new 'Mercedes', 'Yellow'
second_car = Car.new 'Jaguar', 'Orange'
third_car = Car.new 'Bentley', 'Pink'
array_of_cars = [first_car, second_car]
因此,我们的想法是to_proc在类Array中定义一个方法,这样就可以实现:
array_of_cars.map(&[:brand, :color]) #=> [['Mercedes', 'Yellow'], ['Jaguar', 'Orange'], ['Bentley', 'Pink']]
或者我怎么能以某种方式做这样的事情:
[:brand, :color].to_proc.call(first_car) #=> ['Mercedes', 'Yellow']
我有验证Proc和问题
validates :subcategory, presence: true, 
if: Proc.new {|product| product.detail.blank?} && Proc.new { |product|  product.category.id != 16 }
我的问题是当我true第二次进行验证时.
为什么会这样?如果它没有返回false,因为false && true=>false?
为什么 ruby 中的 Proc 在执行调用 Proc 的方法中的剩余代码之前返回?
def hello
  a = Proc.new{ return }
  a.call
  puts "Hello"
end
def proc
  hello
  puts "Proc"
end
这里return将跳过puts "Hello"并仅打印puts "Proc"
但lambda打印puts "Hello"也是如此。
这是什么原因呢?
proc ×10
ruby ×7
block ×2
android ×1
break ×1
c ×1
file ×1
filereader ×1
filesystems ×1
lambda ×1
linux-kernel ×1
loops ×1
namespaces ×1
overriding ×1
tcl ×1
variables ×1